Загрузка файла с помощью XMLHttprequest – Отсутствует граница в 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:

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.