上传使用XMLHttpRequest一个文件 - 在多缺少边界/ form-data的(Upload

2019-06-28 03:04发布

我上传使用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的警告:

Missing boundary in multipart/form-data POST data in Unknown on line 0

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

我应该在此问题?

Answer 1:

嗯,这是奇怪,我一点点,但这是什么工作:

// Open
xhr.open('POST', this.options.action, true);

// !!! REMOVED ALL HEADERS

// Send
xhr.send(formData);

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

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

经测试,在浏览器,Mozilla,Safari和IE10。



文章来源: Uploading a file with XMLHttprequest - Missing boundary in multipart/form-data