通过XHR PUT进行PHP流式传输不尊重边界

时间:2013-07-15 23:52:15

标签: php javascript upload xmlhttprequest

我通过XMLHttpRequest和FormData上传,PHP正在将流放入文件中,但是,该文件包含内容边界,从而破坏了文件。

明显我做错了什么?

请求:

Request Method:PUT
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Content-Length:11284137
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryPCL6dJMBjnsguCO9
Cookie:language=en; user=e4f383eb3cf900b61cae25d1dd24c3d1; CP=*; __utma=137079138.41499654.1373408305.1373408305.1373475669.2; __utmz=137079138.1373408305.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); PHPSESSID=icdrjtchkdik6pcs0u2ajdsrl2
DNT:1
Host:www.page.com
Origin:https://groups.google.com
Pragma:no-cache
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36
Request Payload
------WebKitFormBoundaryPCL6dJMBjnsguCO9
Content-Disposition: form-data; name="userfile"; filename="blob"
Content-Type: image/png


------WebKitFormBoundaryPCL6dJMBjnsguCO9--

PHP方面

 file_put_contents(
    $filepath,
    fopen('php://input', 'r')
 );

 exit();

JS方

var formData = new FormData();
formData.append('userfile',blob);
var xhr = XMLHttpRequest();
xhr.open('PUT','http://www.page.com/',true);
xhr.send(formData);

文件上传成功,但上传的图片已损坏,因为它包含二进制数据前后的边界。 PHP不应该自动执行此操作吗?

1 个答案:

答案 0 :(得分:1)

仅在POST个请求上由PHP处理多部分数据。使用PUT,您可以直接访问字节流,您需要自己处理它。

如果有变化,this bug report / feature request将会关闭