เครื่องมือบรรทัดคำสั่ง Linux สำหรับการอัปโหลดไฟล์ผ่าน HTTP เป็นแบบหลายส่วน / แบบฟอร์มข้อมูล?


25

ฉันเห็นว่า wget มี--post-fileตัวเลือก แต่ manpage พูด

Wget ไม่สนับสนุนการ multipart / form-data สำหรับการส่งข้อมูล POST; แอปพลิเคชันเท่านั้น / x-www-form-urlencoded เพียงคนเดียว--post-dataและ--post-fileควรมีการระบุ

มีวิธีที่คล้ายกันในการอัปโหลดไฟล์ในหลายส่วน / แบบฟอร์มข้อมูลหรือไม่?

คำตอบ:



17

เป็นไปได้ที่จะทำเช่นนี้ด้วย wget เท่านั้น อย่างน้อยกับรุ่น 1.13.4 และอื่น ๆ ตัวเลือก --post-file อนุญาตให้คุณระบุไฟล์ที่จะส่งตราบใดที่ไฟล์ postdata ถูกสร้างขึ้นอย่างถูกต้อง

ฉันยังได้ทดสอบสิ่งนี้ด้วยไฟล์ไบนารีและทำงานได้ตามที่คาดไว้ คุณไม่จำเป็นต้องเข้ารหัส 64 ไฟล์ แต่คุณต้องแน่ใจว่าไฟล์ของคุณไม่มีขอบเขต

คำสั่งต่ำสุดที่จำเป็นสำหรับการทำงานนี้คือ:

wget --header="Content-type: multipart/form-data boundary=FILEUPLOAD" --post-file postfile http://domain/uploadform

และไฟล์ postdata จะต้องมีสิ่งที่ชอบ:

--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--

รายละเอียดมีความสำคัญมากมายที่นี่:

  1. บรรทัดในไฟล์ข้อมูลโพสต์ถูกยกเลิกด้วย \ r \ n ข้อยกเว้นเพียงอย่างเดียวคือข้อมูลในบริบทไฟล์
  2. แอตทริบิวต์ BOUNDARY ทุกรายการใน postdata จะต้องตรงกับค่า BOUNDARY ในการเรียกเพื่อรับ (ตัวอย่างไฟล์ในดาวน์โหลด)
  3. ขอบเขตทั้งหมดจะนำหน้าด้วยเครื่องหมายขีดคั่นสองตัว "-" และสิ้นสุดด้วย \ r \ n
  4. ขอบเขตสุดท้ายถูกต่อท้ายด้วยเครื่องหมายขีดคั่นพิเศษสองตัว "-" และสิ้นสุดด้วย \ r \ n
  5. ข้อมูลแต่ละส่วนเนื้อหาไฟล์หรือค่าพารามิเตอร์ถูกล้อมรอบด้วยบรรทัดว่าง "\ r \ n"

ฉันคิดว่านี่อาจช่วยบางคนได้เนื่องจากสภาพแวดล้อมที่ควบคุมบางอย่างอาจไม่ดี


ฉันไม่สามารถทำงานกับไฟล์ไบนารีได้ ฉันสร้างส่วนข้อความของไฟล์ข้อมูลโพสต์บันทึกใช้งานcat pic.jpg >> postdataโหลดใน Notepad ++ แล้วต่อท้ายขอบเขตสุดท้าย + '-' + EOL การอ้างอิง W3C
Chloe

@ โคลอี้ฉันต้องกลับไปที่นี่สำหรับโครงการอื่นและในครั้งนี้จำเป็นต้องใช้ไฟล์ไบนารีและพบว่าทำงานได้ตามที่คาดไว้ ฉันสร้างหน้าอัปโหลดไฟล์ php อย่างง่ายจากนั้นก็ทำผ่านเบราว์เซอร์เพื่อรับขนาดไฟล์ก่อนแล้วจึงนำไปเปรียบเทียบกับผลลัพธ์จากการใช้ wget ฉันขอแนะนำให้คุณทำเช่นเดียวกันเนื่องจากการขึ้นบรรทัดใหม่จรจัดอาจทำให้กระบวนการทั้งหมดล้มเหลว
tu-Reinstate Monica-dor duh

1
เซมิโคลอนหายไป มันทำให้เกิดปัญหากับ python tornado --header = "Content-type: multipart / form-data; boundary = FILEUPLOAD"
FlappySocks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.