我可以看到 wget 有一个--post-file
选项,但是手册页说
Wget 目前不支持 multipart/form-data 传输 POST 数据;仅支持 application/x-www-form-urlencoded。只需指定
--post-data
和中的一个即可。--post-file
有没有类似的方法在 multipart/form-data 中上传文件?
答案1
使用 curl:
curl -F "file=@localfile;filename=nameinpost" url.com
答案2
仅使用 wget 即可实现此操作。至少使用版本 1.13.4 或其他版本。只要正确构建了 postdata 文件,--post-file 选项便允许您指定要发送的文件。
我也用二进制文件测试了这一点,它按预期工作。您不需要对文件进行 base64 编码,但您需要确保您的文件不包含边界。
完成这项工作所需的最少命令是:
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 属性必须匹配对 wget 的调用中的 BOUNDARY 值。(示例中为 FILEUPLOAD)
- 所有边界均以两个连字符“--”作为前缀,并以 \r\n 结尾
- 最后一个边界以两个额外的连字符“--”作为后缀,并以 \r\n 结尾
- 每一条数据,文件内容或者参数值,都用空行“\r\n”包围
我认为这可能会对某些人有所帮助,因为一些受控环境有 wget 但没有 curl。
答案3
这对我有用:
curl -v -F filename=image.jpg -F [email protected] http://localhost:8080/api/upload
答案4
以下对我有用wget
:
wget --method PUT --body-file=/home/sk/file.pdf https://transfer.sh/file.pdf -O - -nv
致谢:https://ostechnix.com/easy-fast-way-share-files-internet-command-line/