2011-12-29 42 views
0

当我上传文件的正常方式没有Ajax,页面重新加载,和POST请求的有效载荷是这样的,当我看着它在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后端中的任何内容。

+0

我结束了使用FormData对象......更容易上传文件。如果您使用FileReader,则必须对二进制数据进行一些额外的处理以使其正确传递POST请求,与仅使用FormData对象相比,这是一项额外的工作。看看这里:https://developer.mozilla.org/en/DOM/XMLHttpRequest/Using_XMLHttpRequest#Using_FormData_objects – trusktr 2011-12-29 12:09:52

回答

相关问题