Można to zrobić tylko za pomocą wget. Przynajmniej z wersją 1.13.4 i może innymi. Opcja --post-file pozwala określić plik do wysłania, o ile plik postdata jest poprawnie skonstruowany.
Przetestowałem to również z plikami binarnymi i działa zgodnie z oczekiwaniami. NIE musisz kodować pliku base64, ale musisz upewnić się, że plik nie zawiera granicy.
Minimalne polecenie wymagane do wykonania tej pracy to:
wget --header="Content-type: multipart/form-data boundary=FILEUPLOAD" --post-file postfile http://domain/uploadform
a plik postdata musiałby zawierać coś takiego:
--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--
Ważne są tutaj pewne szczegóły:
- Linie w pliku danych post są zakończone za pomocą \ r \ n. Jedynym wyjątkiem są dane w kontekście pliku.
- Każdy atrybut GRANICZNY w postdata musi być zgodny z wartością GRANICA w wywołaniu wget. (FILEUPLOAD w przykładzie)
- Wszystkie granice są poprzedzone dwoma łącznikami „-” i kończą się \ r \ n
- Ostatnia granica jest opatrzona dwoma dodatkowymi myślnikami „-” i kończy się na \ r \ n
- Każdy kawałek danych, zawartość pliku lub wartość parametru jest otoczony pustą linią „\ r \ n”
Pomyślałem, że to może komuś pomóc, ponieważ niektóre kontrolowane środowiska mają wget, ale się nie zwija.
cat pic.jpg >> postdata
, załadowałem w Notepad ++ i dołączyłem ostatnią granicę + '-' + EOL. Dokumentacja W3C