เป็นไปได้ที่จะทำเช่นนี้ด้วย 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--
รายละเอียดมีความสำคัญมากมายที่นี่:
- บรรทัดในไฟล์ข้อมูลโพสต์ถูกยกเลิกด้วย \ r \ n ข้อยกเว้นเพียงอย่างเดียวคือข้อมูลในบริบทไฟล์
- แอตทริบิวต์ BOUNDARY ทุกรายการใน postdata จะต้องตรงกับค่า BOUNDARY ในการเรียกเพื่อรับ (ตัวอย่างไฟล์ในดาวน์โหลด)
- ขอบเขตทั้งหมดจะนำหน้าด้วยเครื่องหมายขีดคั่นสองตัว "-" และสิ้นสุดด้วย \ r \ n
- ขอบเขตสุดท้ายถูกต่อท้ายด้วยเครื่องหมายขีดคั่นพิเศษสองตัว "-" และสิ้นสุดด้วย \ r \ n
- ข้อมูลแต่ละส่วนเนื้อหาไฟล์หรือค่าพารามิเตอร์ถูกล้อมรอบด้วยบรรทัดว่าง "\ r \ n"
ฉันคิดว่านี่อาจช่วยบางคนได้เนื่องจากสภาพแวดล้อมที่ควบคุมบางอย่างอาจไม่ดี
cat pic.jpg >> postdata
โหลดใน Notepad ++ แล้วต่อท้ายขอบเขตสุดท้าย + '-' + EOL การอ้างอิง W3C