11

我正在使用 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");警告消失。

这里应该是什么问题?

4

1 回答 1

18

嗯,这对我来说有点奇怪,但这是有效的:

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

// !!! REMOVED ALL HEADERS

// Send
xhr.send(formData);

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

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

在 Chrome、Mozilla、Safari 和 IE10 中测试。

于 2012-09-10T10:47:05.660 回答