Bunu sadece wget ile yapmak mümkündür. En azından sürüm 1.13.4 ve belki de diğerleri. --Post-file seçeneği, veri dosyası düzgün bir şekilde oluşturulduğu sürece gönderilecek bir dosya belirlemenizi sağlar.
Ayrıca bu ikili dosyaları ile test ettik ve beklendiği gibi çalışıyor. Base64'ü dosyayı kodlamanıza gerek yok, ancak dosyanızın sınır içermediğinden emin olmanız gerekir.
Bu işi yapmak için gereken minimum komut şudur:
wget --header="Content-type: multipart/form-data boundary=FILEUPLOAD" --post-file postfile http://domain/uploadform
ve son veri dosyasının aşağıdaki gibi bir şey içermesi gerekir:
--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--
Burada birkaç ayrıntı önemlidir:
- Veri sonrası dosyadaki satırlar \ r \ n ile sonlandırılır. Tek istisna, dosya bağlamındaki verilerdir.
- PostData her SINIR nitelik gerekir wget çağrısında SINIR değerle aynı. (Örnekte FILEUPLOAD)
- Tüm sınırlara iki "-" tiresi eklenmiş ve \ r \ n ile sonlandırılmıştır.
- Son sınır iki ekstra tire "-" ile eklenmiş ve \ r \ n ile sonlandırılmıştır.
- Her veri parçası, dosya içeriği veya parametre değeri "\ r \ n" boş bir satırla çevrilidir
Kontrollü ortamların kıvrıldığı, ancak kıvrılmadığı için bunun birisine yardımcı olabileceğini düşündüm.
cat pic.jpg >> postdata
, Not Defteri ++ 'ya yükledim ve son sınır +' - '+ EOL' yi ekledim. W3C Referans