Це можна зробити лише за допомогою wget. Принаймні, з версією 1.13.4 і, можливо, іншими. Параметр --post-file дозволяє вказати файл для надсилання, якщо файл постданих сконструйований належним чином.
Я також протестував це за допомогою бінарних файлів, і він працює як слід. НЕ потрібно кодувати файл base64, але вам потрібно переконатися, що ваш файл не містить межі.
Мінімальна команда, необхідна для виконання цієї роботи, буде:
wget --header="Content-type: multipart/form-data boundary=FILEUPLOAD" --post-file postfile http://domain/uploadform
і файл післяданих повинен містити щось на зразок:
--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 у поштових даних повинен відповідати значенню BOUNDARY у виклику wget. (ФАЙЛУВАННЯ в прикладі)
- Усі межі мають префікс з двома дефісами "-" і закінчуються \ r \ n
- Остання межа суфіксна з двома зайвими дефісами "-" і закінчується \ r \ n
- Кожен фрагмент даних, вміст файлу або значення параметра оточений порожнім рядком "\ r \ n"
Я подумав, що це може допомогти комусь, оскільки деякі контрольовані середовища мають wget, але не згортаються.
cat pic.jpg >> postdata
, завантажив у Блокнот ++ та додав останній кордон + '-' + EOL. Довідник W3C