Use o curl:
curl -F "file=@localfile;filename=nameinpost" url.com
Eu posso ver que wget tem uma opção --post-file, mas a página de manual diz "Wget não suporta atualmente dados multipart / form para transmissão de dados POST; somente application / x-www-form-urlencoded. Apenas um de '--post-data' e '--post-file' devem ser especificados. "
Existe uma maneira semelhante de fazer upload de arquivos em dados de várias partes / formulários?
É possível fazer isso apenas com o wget. Pelo menos com a versão 1.13.4 e talvez com outras. A opção --post-file permite que você especifique um arquivo para enviar, desde que o arquivo postdata seja construído adequadamente.
Eu também testei isso com arquivos binários e funciona como esperado. Você NÃO precisa codificar com base64 o arquivo, mas precisa garantir que seu arquivo não contenha o limite.
O comando mínimo necessário para fazer este trabalho seria:
wget --header="Content-type: multipart/form-data boundary=FILEUPLOAD" --post-file postfile http://domain/uploadform
e o arquivo postdata precisaria conter algo como:
--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--
Vários detalhes são importantes aqui:
Eu achei que isso poderia ajudar alguém, já que alguns ambientes controlados se tornaram indesejados, mas não se curvam.