Przesyłam plik z XMLHttprequest. Oto funkcja JS, który przesyła plik:Wgrywanie pliku z XMLHttprequest - Brakujące obramowanie w wieloczęściowym/formularzowym-danych
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);
}
Po stronie serwera, w upload.php czytam plik w ten sposób:
file_put_contents($filename, (file_get_contents('php://input')));
wszystko działa w porządku, poza tym, że Otrzymuję ostrzeżenie PHP:
Missing boundary in multipart/form-data POST data in Unknown on line 0
.
Jeśli usuniemy tę linię: xhr.setRequestHeader("Content-Type", "multipart/form-data");
ostrzeżenie zniknie.
Jaki powinien być problem?
Spróbuj użyć 'application/x-www-form-urlencoded' jako typu zawartości. Lub pominąć, ponieważ jest to domyślny typ zawartości wysyłany przez żądanie ajax. –
To może działać, ale w przypadku dużych plików (nawet 5-600 KB) przeglądarka zawiesi się, ponieważ musi wysłać plik w formacie "tekstowym". Muszę użyć "danych wieloczęściowych/formularza". –
Przepraszam, przeoczony bit do przesyłania plików (nie wiem jak), ale [myślę, że to może odpowiedzieć na twoje zadanie] (http://stackoverflow.com/questions/5933949/how-to-send-multipart-form- data-form-content-by-ajax-no-jquery), a dokładniej: 'xhr.setRequestHeader (" typ zawartości "," wieloczęściowy/formularz danych, charset = utf-8; boundary = "+ Math.random () .toString(). substr (2)); 'powinno załatwić sprawę –