La carga formidable no funciona: ‘archivos “indefinidos, sin error

Estoy tratando de cargar un archivo usando formidable, siguiendo el tutorial en el Node Beginner Book . Siguiendo este código, tengo un módulo de servidor que pasa el objeto de request a un módulo requestHandler. La página principal carga un formulario con el siguiente controlador:

 function start(response) { console.log("Request handler 'start' was called."); var body = ''+ ''+ ''+ ''+ ''+ ''+ '<input type="file" name="upload" multiple="multiple"'+ ''+ ''+ ''+ ''; response.writeHead(200, {"Content-Type": "text/html"}); response.write(body); response.end(); } 

Cuando se envía el formulario, la ruta / upload activa la siguiente función del controlador de carga:

 function upload(response,request) { console.log("Request handler 'upload' was called."); var form = new formidable.IncomingForm(); console.log("about to parse"); form.parse(request, function(error, fields, files) { console.log("parsing done"); console.log(util.inspect({error: error, fields: fields, files: files})); fs.rename(files.upload.path, "/tmp/test.png", function(error) { if (error) { console.log(error); fs.unlink("/tmp/test.png"); fs.rename(files.upload.path, "/tmp/test.png"); } }); response.writeHead(200, {"Content-Type": "text/html"}); response.write("received image:
"); response.write(""); reponse.end(); }); }

Sin embargo, cuando se hace clic en el botón de carga, el servidor se bloquea con el siguiente error:

 /home/****/Coding/nodebeginner/requestHandlers.js:38 fs.rename(files.upload.path, "/tmp/test.png", function(erro ^ TypeError: Cannot read property 'path' of undefined at /home/****/Coding/nodebeginner/requestHandlers.js:38:25 at IncomingForm. (/home/****/Coding/nodebeginner/node_modules/formidable/lib/incoming_form.js:104:9) at IncomingForm.EventEmitter.emit (events.js:92:17) at IncomingForm._maybeEnd (/home/****/Coding/nodebeginner/node_modules/formidable/lib/incoming_form.js:551:8) at Object.end (/home/****/Coding/nodebeginner/node_modules/formidable/lib/incoming_form.js:238:12) at IncomingMessage. (/home/****/Coding/nodebeginner/node_modules/formidable/lib/incoming_form.js:129:30) at IncomingMessage.EventEmitter.emit (events.js:92:17) at _stream_readable.js:920:16 at process._tickCallback (node.js:415:13) 

Evidentemente, la variable de los files no está definida. Pensé que podría haber un error, pero no la variable de error está establecida en null . Así que estoy un poco perplejo aquí. Ideas?

Tuve el mismo problema Creo que ves el código de línea en Node Beginner Book, al final del libro. Lo arreglé eliminando el código de seguimiento en el archivo server.js:

 // req.setEncoding("utf8"); // req.addListener("data", function(postDataChunk) { // postData += postDataChunk; // }); // req.addListener("end", function() { // route(handle, pathname, res, req); // }); 
 Just do: 

ruta (manejar, nombre de ruta, res, req);

 And last, you must be careful at html form tags. Sorry for my English and best wishes! ***VinRover Nguyen*** 

También estoy teniendo el mismo problema. A la etiqueta de formulario le falta una comilla doble de cierre (“) en el atributo enctype.

Me he quedado atascado en el mismo tema. Parece que la clase de carga ha sido reemplazada o mal escrita. Intente cambiar la referencia de files.upload.path a files.Upload.path. Funciona aqui Echa un vistazo a la twig maestra para más información: Git

Parece que tienes algunos errores en tu “cuerpo de var”. Tratar :

 var body = '' + '' + '' + '' + '' + '
' + '' + '' + '
' + '' + '';

Hay un error en los nombres de los parámetros para la callback en form.parse.

El Node Beginner Book muestra el código como:

 form.parse(request, function(error, fields, files) { //code } 

Los parámetros no deben ser plurales en la función de callback:

 form.parse(request, function(error, field, file) { //code } 

Eche un vistazo a IncomingForm.prototype.parse en /node_modlues/formidable/lib/incoming_form.js. La callback está escuchando singular “campo” y “archivo”.

    Intereting Posts