unexpected nodejs node form example data node.js multer

node.js - form - nodejs multer file upload example



No se puede aplicar.use(multer). Error "requiere funciĆ³n de middleware" (7)

Cambiar a app.use (multer ({dest: ''./ uploads /''}). Single (''foto'')); en la aplicación.js funciona para que pueda iniciar el servidor

Estoy empezando a aprender NodeJS y tengo un problema. Me gustaría subir archivos a mi servidor. Para hacerlo, busqué y descubrí este módulo multer . Haciendo como el ejemplo en GitHub funciona:

var express = require(''express''); var multer = require(''multer''); var upload = multer({ dest: ''uploads/'' }); var app = express() app.post(''/uploadImage'', upload.single(''image''), function(req, res) { console.log(req.file); });

Al publicar una imagen con FormData en /uploadImage la imagen se guarda en el directorio /uploadImage uploads/ . Lo que pasa es que la imagen se guarda con un nombre extraño y me gustaría guardarla con su nombre original. Para hacerlo, comprendí que tendría que llamar a app.use(multer({ dest: ''uploads/'' }))'' y luego podría acceder a req.file en mi función como:

app.post(''/uploadImage'', function(req, res) { console.log(req.file); });

Pero me aparece un error al probar app.use ():

TypeError: app.use() requires middleware functions at EventEmitter.use (project/node_modules/express/lib/application .js:209:11)

Estoy usando NodeJS 0.12.7 y Express 4.13.1

¿Cómo puedo lograr esa carga? Gracias.


Debes usar app.use(multer({dest:''./uploads/''})) en la forma de uno de estos:

app.use(multer({dest:''./uploads/''}).single(...)); app.use(multer({dest:''./uploads/''}).array(...)); app.use(multer({dest:''./uploads/''}).fields(...));

es decir:

app.use(multer({dest:''./uploads/''}).single(''photo''));

Y asegúrese de tener algo como:

<form action="/postPhotos" enctype="multipart/form-data" method="post"> <input type="file" name="photo"> <input type="submit" value="Upload photo"> </form>

En tu html


Desde la versión 1.0.0

var upload = multer({ dest: ''tmp/'' }); app.post(''/file_upload'', upload.single(''photo''), function (req, res) {


La respuesta de @ 127.0.0.1 es correcta, pero en caso de que esté utilizando Express Router , el código cambia un poco:

var express = require(''express''); var multer = require(''multer''); var router = express.Router(); var uploads = multer({ dest: ''public/uploads/'' }); router.post(''/upload'', uploads.single(''avatar''), function(req, res, next) { console.log(req.file); //... });

Y lo importante, la codificación del formulario debe ser enctype="multipart/form-data" como ya se dijo, así:

<form action="/upload" enctype="multipart/form-data" method="post"> <input type="file" name="avatar"> <input type="submit" value="Go avatar go!"> </form>


Me encontré con el mismo problema. Y lo solucioné Para el primer problema, ¿cómo obtener el nombre del archivo original? Imprimí la solicitud completa y encontré que podíamos obtener el nombre original utilizando la ruta "req.file.originalname"

y la otra pregunta, ¿cómo usar "app.use ()"?
se refiere: here


No puede cambiar el nombre de archivo usando multer pero puede usar el flujo de Node.js y el módulo fs para copiar el contenido del archivo ya cargado en un archivo nuevo (establecer como nombre de archivo original) en la misma carpeta y eliminar el anterior.

En primer lugar, importa fs, path y multer en tu script de nodo.

var express = require(''express''); var multer = require(''multer''); var fs = require(''fs''); var pathModule = require(''path'');

Ahora, configure el directorio de destino de cualquier tipo de archivos usando multer como se muestra a continuación.

var app = express(); app.use(multer({dest:__dirname+''/resoucres/''}).any());

Ahora usa stream y fs para resolver tu problema.

app.post(''/uploadImage'', function(request, response) { var readerStream = fs.createReadStream(request.files[0].path); var dest_file = pathModule.join(request.files[0].destination, request.files[0].originalname); var writerStream = fs.createWriteStream(dest_file); var stream = readerStream.pipe(writerStream); stream.on(''finish'', function(){ fs.unlink(request.files[0].path); }); });


var app = require(''express''); var multer = require(''multer''); app=express(); app.use(multer({dest:__dirname+''/file/uploads/''}).any()); app.post(''/upload'',function(req,res){ console.log(req.files); res.redirect(''/''); });