我正在尝试使用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发送数据非常重要
答案 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和 内容编码标题)。