Alat baris perintah Linux untuk mengunggah file melalui HTTP sebagai multipart / formulir-data?


25

Saya dapat melihat bahwa wget memiliki --post-fileopsi, tetapi halaman manual mengatakan

Wget saat ini tidak mendukung multipart / form-data untuk mengirimkan data POST; hanya aplikasi / x-www-form-urlencoded. Hanya satu dari --post-datadan --post-fileharus ditentukan.

Apakah ada cara yang serupa untuk mengunggah file dalam multipart / form-data?

Jawaban:


31

Gunakan ikal:

curl -F "file=@localfile;filename=nameinpost" url.com

17

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:

  1. Baris dalam file data posting diakhiri dengan \ r \ n. Satu-satunya pengecualian adalah data di dalam konteks file.
  2. Setiap atribut BOUNDARY di postdata harus cocok dengan nilai BOUNDARY dalam panggilan untuk wget. (FILEUPLOAD dalam contoh)
  3. Semua batas diawali dengan dua tanda hubung "-" dan diakhiri dengan \ r \ n
  4. Batas terakhir diberi akhiran dengan dua tanda hubung ekstra "-" dan diakhiri dengan \ r \ n
  5. 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


Saya tidak bisa mendapatkan wget untuk bekerja dengan file biner. Saya membuat bagian teks dari file data posting, disimpan, digunakan cat pic.jpg >> postdata, dimuat di Notepad ++, dan ditambahkan batas terakhir + '-' + EOL. Referensi W3C
Chloe

@ Chloe, saya harus meninjau kembali ini untuk proyek lain, dan kali ini file biner diperlukan dan ternyata berfungsi seperti yang diharapkan. Saya membuat halaman unggah file php sederhana dan kemudian melakukannya melalui browser untuk pertama-tama mendapatkan ukuran file dan kemudian membandingkannya dengan hasil dari menggunakan wget. Saya sarankan Anda melakukan hal yang sama karena baris baru yang menyimpang dapat menyebabkan seluruh proses gagal.
tu-Reinstate Monica-dor duh

1
Tanda titik koma tidak ada. Ini menyebabkan masalah dengan python tornado --header = "Tipe konten: multipart / form-data; batas = FILEUPLOAD"
FlappySocks
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.