[英]AngularJS: How do I send an image file in POST via $resource?
[英]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.