我尝试了多种方法,并在StkOvfl和W3规范中提出了很多问题,但仍然不知道。
我有一个表单输入:
<input type="file" multiple accept="image/*" id="item-image-upload" >
然后在我的Javascript(prepareFormData
方法)中:[See full gist class here]:
var files = this.getFiles();
var formData = new FormData();
for (var i = 0; i < files.length; i++) {
var file = files[i];
if (!file.type.match('image.*')) {
continue;
}
formData.append(this.uploadEntityName, file);
}
当我console.log(files),
时,我得到的所有文件都很好。但是,formData不起作用。我还尝试添加一个任意项目:
formData.append("Apple", 1);
我得到的回答是空的。服务器在php中安置为:
public function uploadImage(){
return json_encode(array_merge($_REQUEST, $_FILES));
}
答案 0 :(得分:4)
我现在99%确定它是您的标题,如果您查看日志,或打开PHP警告,您会看到Warning: Missing boundary in multipart/form-data POST data in Unknown on line 0
我从MDN复制了这个(并添加了标题行并删除了输入文件)并在我的开发盒上的脚本上运行它,该脚本设置为喊出所有错误,然后我收到了错误,然后是空数组
var formData = new FormData();
formData.append("username", "Groucho");
formData.append("accountnum", 123456); // number 123456 is immediately converted to a string "123456"
// JavaScript file-like object
var content = '<a id="a"><b id="b">hey!</b></a>'; // the body of the new file...
var blob = new Blob([content], { type: "text/xml"});
formData.append("somefiles[]", blob);
var request = new XMLHttpRequest();
request.open("POST", "MYDEVBOX/testpost.php");
// remove the line below and it works
request.setRequestHeader("Content-Type", "multipart/form-data");
request.responseType = "json";
request.send(formData);
在决定调查原因后几分钟后回来。它与多部分数据的边界有关。当您执行xhr.send(formData)
(或沿途某处)时,XHR会自动设置具有匹配边界的标题。当您设置该标头时,请求使用该标头,消除边界,PHP不知道在哪里拆分输入。这是一个快速屏幕上限,可以更好地指出它。