mengirim gambar yang disandikan base64 menggunakan curl

8

Saya mencoba mengirim gambar yang disandikan base64 dari baris perintah menggunakan curldan base64seperti ini:

curl -X POST -H "Content-Type: application/json" -d '{"image" : $( base64 ~/Pictures/1.jpg )}' http://some/url/  

Namun, saya mendapat respons kembali dengan mengatakan bahwa itu $adalah token yang tidak terduga. Bagaimana cara mengirim gambar yang disandikan base64?

Anak kecil
sumber

Jawaban:

20

@uru benar, namun jika Anda mencoba mengirim json yang menyandikan data base64 Anda mungkin terlalu besar untuk baris perintah dan Anda mungkin lebih suka sesuatu seperti ini:

(echo -n '{"image": "'; base64 ~/Pictures/1.jpg; echo '"}') |
curl -H "Content-Type: application/json" -d @-  http://some/url/ 

The -X POSTtersirat oleh -d.

meuh
sumber
Ya, ini jauh lebih baik.
muru
Halo, saya gagal ketika saya mencoba menjalankan baris perintah gabungan ini dari kode PHP, $ html = shell_exec ($ str); jika saya menyalin kode $ str dan langsung menjalankannya di baris perintah, tidak apa-apa. Tapi shell_exec tidak berfungsi, tolong bantu :( terima kasih banyak.
Namo Nam
Haha, saya membuat file bash, chmod + x file itu, kemudian menulis perintah saya untuk file dan menjalankan shell_exec ('/ path to sh file / xxx.sh') ;, saya bekerja seperti pesona. Terima kasih.
Namo Nam
1
@ BảoNam Ok, solusi bagus. Saya tidak banyak tahu tentang php, dan saya tidak melihat alasan yang jelas mengapa versi pertama tidak berfungsi. Lihat di file log kesalahan server Anda untuk mendapatkan petunjuk. Anda akan lebih baik memulai pertanyaan baru ketika php terlibat, saya pikir.
meuh
5

Bash tidak berkembang dalam tanda kutip tunggal. '{"image" : $( base64 ~/Pictures/1.jpg )}'dikirim apa adanya. Sebagai gantinya, cobalah:

'{"image" : "'"$( base64 ~/Pictures/1.jpg)"'"}'

(Keluar dari kutipan pembuka sebelum melakukan pergantian perintah lalu buka kutipan lagi.)

muru
sumber
2
Anda perlu memberi tanda kutip dua kali $()jika tidak, garis output base64 akan dibagi menjadi beberapa argumen curl.
meuh
Banyak file gambar dan perintah data$ curl -d "name=Avatar&username=avatar&password=A1234567&[email protected]&token=16b185fe421d5017afb11691681906ed" --data-urlencode 'avatar='"$( base64 ~/Pictures/avatar004.jpg)"'' --data-urlencode 'image='"$( base64 ~/Pictures/avatar001.jpg)"'' --data-urlencode 'picture='"$( base64 ~/Pictures/577383.jpg)"'' http://localhost:8000/api/v1/users/register/
Moreno