Binary XMLHttpRequest头:在服务器到达时解码二进制数据

Binary XMLHttpRequest头:在服务器到达时解码二进制数据,binary,http-headers,xmlhttprequest,content-type,content-disposition,Binary,Http Headers,Xmlhttprequest,Content Type,Content Disposition,我正在使用Javascript的XMLHttpRequest对象构建一个多部分/表单数据httprequest。以下是标题: Accept: */* Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.5 Content-Length: 38539 Content-Type: multipart/form-data; charset=UTF-8; boundary=CONTENT_BOUNDARY Cookie: __utm

我正在使用Javascript的XMLHttpRequest对象构建一个多部分/表单数据httprequest。以下是标题:

Accept:  */*
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.5
Content-Length: 38539
Content-Type: multipart/form-data; charset=UTF-8; boundary=CONTENT_BOUNDARY
Cookie: __utma=111872281.167592067.1396133699.1396133699.1396133699.1; PHPSESSID=ea7cfjgi8e29v1bhnrj580vbc2
DNT: 1
Host: localhost:90
Referer: localhost:90/my_secret_referer/no_peeking.php
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
我将请求发送到一个PHP文档

在下面的代码片段中,可以看到请求主体的一部分。它详细说明了base64中二进制数据的传输,表示已选择的图像文件

--CONTENT_BOUNDARY
Content-Disposition: form-data; name="images[]"; filename="airplane.jpg"
Content-Type: image/jpeg
Content-Transfer-Encoding: base64

.../9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDABkRExYTEBkWFBYcGxkeJT4pJSIiJUw3Oi0...
这个主体部分与整个请求协作,以创建一个到我的服务器的成功AJAX请求。当信息到达服务器时,我对信息进行解码并尽可能地处理它

这个过程中我不满意的部分是二进制数据的手动解码。当使用jQuery的$.ajax()时,人们总是能够在服务器中接收上传的图像作为完整、清晰的图像文件,或者我已经研究了上述两个请求的格式,发现它们也使用多部分/表单数据请求发送二进制信息。我发现的一个区别是,我的请求提供了一个

charset: utf8;
我发送内容类型后,内容类型的内部规范


我可以,如果可以,我如何告诉服务器解码它接收的二进制信息?

我不是100%确定,但我认为只有电子邮件服务器使用
内容传输编码:base64
。我很好奇为什么你要手工构建一个多部分/表单数据帖子正文,你不能使用FormData/Blob/Typed数组吗?你好,谢谢你的评论。在此项目中,用户必须有权添加和删除文件输入的选定文件。在代码中,我必须:提供所有选定文件的内存,显示文件的预览,并仅在用户确认提交后将其提交到服务器。我认为在提交请求时,文件内容的这种弹性需要匹配。好的,但这并不要求您上传它们,因为base64编码可以做到这一点,您可以拥有一个包含用户选择的所有文件对象的数组,在用户指定时添加/删除,然后使用FormDdata对象上传。