Ajax JS / PHP图像上传器无法正常工作

时间:2016-02-09 03:03:47

标签: javascript php ajax form-data

我尝试了多种方法,并在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));
}

1 个答案:

答案 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不知道在哪里拆分输入。这是一个快速屏幕上限,可以更好地指出它。

enter image description here