Dimungkinkan untuk melakukan ini hanya dengan wget. Setidaknya dengan versi 1.13.4 dan mungkin yang lain. Opsi --post-file memungkinkan Anda menentukan file yang akan dikirim, selama file postdata dibuat dengan benar.
Saya juga telah menguji ini dengan file biner dan berfungsi seperti yang diharapkan. Anda TIDAK perlu base64 menyandikan file, tetapi Anda perlu memastikan file Anda tidak mengandung batas.
Perintah minimum yang diperlukan untuk membuat pekerjaan ini adalah:
wget --header="Content-type: multipart/form-data boundary=FILEUPLOAD" --post-file postfile http://domain/uploadform
dan file postdata perlu mengandung sesuatu seperti:
--FILEUPLOAD
Content-Disposition: form-data; name="comment"
I love uploading files!
--FILEUPLOAD
Content-Disposition: form-data; name="uploadFile"; filename="myfile.bin";
Content-Type: application/octet-stream
Media Type: application/octet-stream
Give me some automated file upload action!
--FILEUPLOAD--
Sejumlah detail penting di sini:
- Baris dalam file data posting diakhiri dengan \ r \ n. Satu-satunya pengecualian adalah data di dalam konteks file.
- Setiap atribut BOUNDARY di postdata harus cocok dengan nilai BOUNDARY dalam panggilan untuk wget. (FILEUPLOAD dalam contoh)
- Semua batas diawali dengan dua tanda hubung "-" dan diakhiri dengan \ r \ n
- Batas terakhir diberi akhiran dengan dua tanda hubung ekstra "-" dan diakhiri dengan \ r \ n
- Setiap bagian data, konten file, atau nilai parameter, dikelilingi oleh baris kosong "\ r \ n"
Saya pikir ini mungkin membantu seseorang karena beberapa lingkungan terkendali memiliki wget tetapi tidak melengkung
cat pic.jpg >> postdata
, dimuat di Notepad ++, dan ditambahkan batas terakhir + '-' + EOL. Referensi W3C