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);
}
_
サーバー側では、pload.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");
警告が消えます。
ここで何が問題になるのでしょうか?
これは私にとって少し奇妙ですが、これがうまくいったことです:
// Open
xhr.open('POST', this.options.action, true);
// !!! REMOVED ALL HEADERS
// Send
xhr.send(formData);
この場合、サーバー側ではphp://input
経由で送信されたファイルを読み取りませんが、ファイルは$_FILES
配列にあります。
これで問題は解決しましたが、ファイルが$_FILES
に表示されるのはなぜですか?
Chrome、Mozilla、Safari、IE10でテスト済み。