Multer es un nodo.middleware js para el manejo de multipart/form-data, que se utiliza principalmente para cargar archivos. Está escrito en la parte superior del camarero para una máxima eficiencia.

NOTA: Multer no procesará ningún formulario que no sea de varias partes (multipart/form-data).

Instalación

npm install --save multer

Uso

Multer agrega un objeto body y un objeto file o files al objeto request. El objeto body contiene los valores de los campos de texto del formulario, el objeto file o files contiene los archivos cargados a través del formulario.

Ejemplo de uso básico:

const multer = require('multer')const express = require('express')const app = express()const upload = multer()app.post('/profile', upload.single('avatar'), (req, res, next) => { // req.file is the `avatar` file // req.body will hold the text fields, if there were any})app.post('/photos/upload', upload.array('photos', 12), (req, res, next) => { // req.files is array of `photos` files // req.body will contain the text fields, if there were any})const cpUpload = upload.fields()app.post('/cool-profile', cpUpload, (req, res, next) => { // req.files is an object (String -> Array) where fieldname is the key, and the value is array of files // // e.g. // req.files -> File // req.files -> Array // // req.body will contain the text fields, if there were any})

En caso de que necesite manejar un formulario de solo texto de varias partes, puede usar el método .none(), ejemplo:

const multer = require('multer')const express = require('express')const app = express()const upload = multer()app.post('/profile', upload.none(), (req, res, next) => { // req.body contains the text fields})

API

Información de archivo

Cada archivo contiene la siguiente información:

Clave Descripción
fieldName Nombre del campo especificado en el formulario
originalName Nombre del archivo en el equipo del usuario (undefined si el cliente no proporcionó ningún nombre de archivo)
size Tamaño del archivo en bytes
stream Flujo de archivos
detectedMimeType El tipo mime detectado, o null si no detectamos
detectedFileExtension La extensión de archivo típica para los archivos del tipo detectado, o cadena vacía si no se detectó (con . inicial para coincidir path.extname)
clientReportedMimeType El tipo mime reportado por el cliente usando el encabezado Content-Type, o null1 si el encabezado estaba ausente
clientReportedFileExtension La extensión del archivo cargado (según lo informado por path.extname)

1 Actualmente devuelve text/plain si el encabezado está ausente, esto es un error y se corregirá en una versión de parche. No confíe en este comportamiento.

multer (opts)

Multer acepta un objeto de opciones, las siguientes son las opciones que se pueden pasar a Multer.

Clave Descripción
limits Límites de los datos cargados (descripción completa)

.single(fieldname)

Acepte un solo archivo con el nombre fieldname. El archivo único se almacenará en req.file.

.array(fieldname)

Acepte una matriz de archivos, todos con el nombre fieldname. Opcionalmente se produce un error si se cargan más de maxCount archivos. La matriz de archivos se almacenará enreq.files.

.fields(fields)

Acepta una mezcla de archivos, especificada por fields. Un objeto con matrices de archivos se almacenará en req.files.

fields debe ser un array de objetos con name y, opcionalmente, un maxCount.Ejemplo:

.none()

Acepta solo campos de texto. Si se carga algún archivo, se emitirá un error con el código»LIMIT_UNEXPECTED_FILE». Esto es lo mismo que hacer upload.fields().

.any()

Acepta todos los archivos que pasan por el cable. Una matriz de archivos se almacenará enreq.files.

ADVERTENCIA: Asegúrate de manejar siempre los archivos que sube un usuario.Nunca agregue multer como un middleware global, ya que un usuario malicioso podría cargar archivos a una ruta que no anticipó. Utilice esta función solo en rutas en las que esté manejando los archivos cargados.

limits

Un objeto que especifica los límites de tamaño de las siguientes propiedades opcionales. Multer pasa este objeto directamente a Busboy, y los detalles de las propiedades se pueden encontrar en la página de busboy.

Los siguientes límites están disponibles:

Tecla Descripción por Defecto
fieldNameSize Max nombre de campo tamaño '100B'
fieldSize Max valor de campo de tamaño '8KB'
fields número máximo de archivo de campos 1000
fileSize El tamaño máximo de archivo '8MB'
files El número máximo de campos del archivo de 10
headerPairs El número máximo de encabezado clave = >pares de valores para analizar 2000 (igual que el http del nodo)

Los límites de bytes se pueden pasar como un número o como una cadena con un prefijo apropiado.

Especificar los límites puede ayudar a proteger su sitio contra ataques de denegación de servicio (DoS).

Manejo de errores

Al encontrar un error, multer delegará el error a express. Puedes mostrar una buena página de error usando la forma expresa estándar.

Si desea detectar errores específicamente de Multer, puede llamar a la función iddleware usted mismo.

const upload = multer().single('avatar')app.post('/profile', (req, res) => { upload(req, res, (err) => { if (err) { // An error occurred when uploading return } // Everything went fine })})

Deja una respuesta

Tu dirección de correo electrónico no será publicada.