Content-Transfer-Encoding in file upload request

时间:2011-03-02 15:10:03

标签: php javascript http-headers xmlhttprequest

我正在尝试使用XMLHTTPRequest上传文件,并发送此标题:

Content-Type:multipart/form-data, boundary=xxxxxxxxx

--xxxxxxxxx
Content-Disposition: form-data; name='uploadfile'; filename='123_logo.jpg'
Content-Transfer-Encoding: base64
Content-Type: image/jpeg
/*base64data*/

但是在服务器端PHP忽略标题“Content-Transfer-Encoding:base64” 并将base64未解码的数据直接写入文件!

有没有办法解决它?

P.S。使用base64发送数据非常重要

2 个答案:

答案 0 :(得分:11)

泽维尔的回答听起来不对。 RFC2616也有这个说法(第3.7节):

  

通常,HTTP会处理多部分   消息体没有什么不同于   任何其他媒体类型:严格地说   有效载荷。唯一的例外是   “多部分/字节范围”

在我看来,RFC2616的第19.4节正在讨论HTTP作为一个整体,从某种意义上说它使用类似于MIME的语法(如标题格式),但符合MIME标准。

此外,还有RFC2388。在section 3,最后一段,它说:

  

每个部分都可以编码而且   “content-transfer-encoding”标题
  如果该部分的价值提供   不符合默认的
  编码

Section 4.3详细说明了这一点:

  

4.3编码

     

虽然HTTP协议可以传输任意二进制数据,但是   邮件传输的默认值是7BIT编码。提供的价值   部分可能需要编码和“内容传输编码”   如果值不符合默认值,则提供标头   编码。 [有关详细信息,请参阅section 5 of RFC 2046。]

答案 1 :(得分:2)

我之前的回答是错误的

Content-Transfer-Encoding可能出现在复合体

http://www.ietf.org/rfc/rfc2616.txt

  

这有几个后果。复合体的实体体   types可以包含许多正文部分,每个部分都有自己的MIME和HTTP   标题(包括Content-MD5,Content-Transfer-Encoding和   内容编码标题)。