繁体   English   中英

如何通过POST正确发送二进制格式的文件?

[英]How do I send a file in binary format properly via POST?

在不使用Ajax的情况下以正常方式上传文件时,页面会重新加载,并且在Chrome元素检查器的“网络”标签中查看POST请求有效负载时,它看起来像这样:

------WebKitFormBoundaryXseUYiNOVZKdYrTk
Content-Disposition: form-data; name="fdata[]"; filename="baby_bot.jpg"
Content-Type: image/jpeg


------WebKitFormBoundaryXseUYiNOVZKdYrTk
Content-Disposition: form-data; name="fdata[]"; filename="dyno_bones.png"
Content-Type: image/png


------WebKitFormBoundaryXseUYiNOVZKdYrTk--

但是,当我尝试手动创建POST请求并通过使用FileReader对象以二进制格式读取文件的内容并通过手动创建的POST请求发送二进制数据来使用ajax发送文件时,有效负载在检查员:

------CustomFormBoundaryXseUYiNOVZKdYrTk
Content-Disposition: form-data; name="fdata[]"; filename="baby_bot.jpg"
Content-Type: image/jpeg

a2q#¡B±Áð$RÑá3ñ%br4C&Scs¢ÂâÿÄ

------CustomFormBoundaryXseUYiNOVZKdYrTk
Content-Disposition: form-data; name="fdata[]"; filename="dyno_bones.png"
Content-Type: image/png

a2q#¡B±Áð$RÑá3ñ%br4C&Scs¢ÂâÿÄ

------CustomFormBoundaryXseUYiNOVZKdYrTk--

请注意,当您在POST请求的正文中时,可以看到二进制数据(由那些随机带有重音符号的字符表示)。 如何使手动创建的POST请求浏览器完全相同 ,以便从PHP处理程序脚本获得相同的结果? 这里的想法是,我可以模拟浏览器发送的POST请求,而不必修改PHP后端中的任何内容。

与其尝试模拟POST请求数据, FormData使用FormData对象。 它易于使用,可让您轻松地通过ajax发送表单数据。 FormData对象借助XMLHttpRequest对象自动创建并发送适当的POST请求。

Mozilla文档中包含有关如何使用XMLHttpRequest对象不错的文章,该文章本身也包含有关如何使用FormData对象不错的示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM