Estoy cargando un archivo con XMLHttprequest. Aquí está la función JS, que carga un archivo:Carga de un archivo con XMLHttprequest - Falta el límite en multipart/form-data
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);
}
En el lado del servidor, en upload.php leí el archivo de esta manera:
file_put_contents($filename, (file_get_contents('php://input')));
Todo funciona bien, excepto que Me aparece una advertencia de PHP:
Missing boundary in multipart/form-data POST data in Unknown on line 0
.
Si elimino esta línea: xhr.setRequestHeader("Content-Type", "multipart/form-data");
, la advertencia desaparece.
¿Cuál debería ser el problema aquí?
Intenta usar 'application/x-www-form-urlencoded' como tipo de contenido. O déjalo fuera, ya que este es el tipo de contenido predeterminado enviado por una solicitud de AJAX. –
Esto puede funcionar, pero para archivos grandes (incluso 5-600 KB) el navegador se congelará porque tiene que enviar el archivo en un formato de "texto". Tengo que usar el 'multipart/form data'. –
Lo sentimos, se pasó por alto el bit de carga de archivos (no sé cómo), pero [creo que esto podría responder a su queston] (http://stackoverflow.com/questions/5933949/how-to-send-multipart-form- data-form-content-by-ajax-no-jquery), más específicamente: 'xhr.setRequestHeader (" content-type "," multipart/form-data; charset = utf-8; boundary = "+ Math.random () .toString(). substr (2)); 'debería hacer el truco –