上传带有XMLHttprequest的文件-多部分/表单数据中缺少边界


Uploading a file with XMLHttprequest - Missing boundary in multipart/form-data

我正在上传一个带有XMLHttprequest的文件。这是JS函数,它上传一个文件:

var upload = function(file) {
    // Create form data
    var formData = new FormData();
    formData.append('file', file);
    var xhr = new XMLHttpRequest();
    // Open
    xhr.open('POST', this.options.action);
    // Set headers
    xhr.setRequestHeader("Cache-Control", "no-cache");
    xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    xhr.setRequestHeader("Content-Type", "multipart/form-data");
    xhr.setRequestHeader("X-File-Name", file.fileName);
    xhr.setRequestHeader("X-File-Size", file.fileSize);
    xhr.setRequestHeader("X-File-Type", file.type);
    // Send
    xhr.send(formData);
}

在服务器端,在upload.php中,我以这种方式读取文件:

file_put_contents($filename, (file_get_contents('php://input')));

一切都很好,除了我收到一个PHP警告:

CCD_ 1。

如果我删除此行:xhr.setRequestHeader("Content-Type", "multipart/form-data");警告消失。

这里应该有什么问题?

这对我来说有点奇怪,但这就是工作原理:

// Open
xhr.open('POST', this.options.action, true);
// !!! REMOVED ALL HEADERS
// Send
xhr.send(formData);

在这种情况下,在服务器端,我不会读取通过php://input发送的文件,但该文件将在$_FILES数组中。

这解决了我的问题,但我仍然很好奇为什么现在文件出现在$_FILES中?

在Chrome、Mozilla、Safari和IE10中进行了测试。