Multer è un nodo.js middleware per la gestione multipart/form-data, che viene utilizzato principalmente per il caricamento di file. Si è writtenon top di busboy per la massima efficienza.

NOTA: Multer non elaborerà alcun modulo che non sia multipart (multipart/form-data).

Installazione

npm install --save multer

Utilizzo

Multer aggiunge un oggetto body e un oggetto file o files all’oggetto request. L’oggetto body contiene i valori dei campi di testo del modulo, l’oggetto file o files contiene i file caricati tramite il modulo.

Esempio di utilizzo di base:

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})

Nel caso in cui sia necessario gestire un modulo multipart solo testo, è possibile utilizzare il metodo .none(), ad esempio:

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

Informazioni sul file

Ogni file contiene le seguenti informazioni:

Tasto Descrizione
fieldName nome del Campo specificato nel modulo
originalName Nome del file sul computer dell’utente (undefined se non il nome del file fornito dal cliente)
size la Dimensione del file in byte
stream Flusso di file
detectedMimeType rilevato mime-type, o null se non siamo riusciti a rilevare
detectedFileExtension La tipica estensione del file per i file rilevato un tipo o una stringa vuota se non siamo riusciti a rilevare (con i principali . corrisponda path.extname)
clientReportedMimeType Il tipo mime segnalato dal cliente utilizzando il Content-Type intestazione, o null1 se l’intestazione era assente
clientReportedFileExtension L’estensione del file caricato (come riportato da path.extname)

1 Attualmente restituisce text/plain se l’intestazione è assente, questo è un bug che sarà risolto in una patch. Non fare affidamento su questo comportamento.

multer(opts)

Multer accetta un oggetto options, le seguenti sono le opzioni che possono essere passate a Multer.

Tasto Descrizione
limits Limiti dei dati caricati (la descrizione completa)

.single(fieldname)

Accettare un singolo file con il nome fieldname. Il singolo file verrà memorizzatoin req.file.

.array(fieldname)

Accetta una serie di file, tutti con il nome fieldname. Opzionalmente errore se vengono caricati file più di maxCount. L’array di file verrà memorizzato inreq.files.

.fields(fields)

Accetta un mix di file, specificato da fields. Un oggetto con array di fileswill sarà memorizzato in req.files.

fields dovrebbe essere un array di oggetti con namee facoltativamente un maxCount.Esempio:

.none()

Accetta solo campi di testo. Se viene effettuato un caricamento di file, verrà emesso un errore con il codice”LIMIT_UNEXPECTED_FILE”. Questo è lo stesso di fare upload.fields().

.any()

Accetta tutti i file che vengono oltre il filo. Una serie di file verrà memorizzata inreq.files.

ATTENZIONE: Assicurati di gestire sempre i file caricati da un utente.Non aggiungere mai multer come middleware globale poiché un utente malintenzionato potrebbe caricare file su un percorso che non hai previsto. Utilizzare questa funzione solo su routeswhere si stanno gestendo i file caricati.

limiti

Un oggetto che specifica i limiti di dimensione delle seguenti proprietà facoltative. Multer passa questo oggetto in busboy direttamente, e i dettagli delle proprietà possono essere trovati sulla pagina di busboy.

Sono disponibili i seguenti limiti:

Tasto Descrizione Default
fieldNameSize Max campo di misura del nome '100B'
fieldSize Max valore del campo dimensioni '8KB'
fields Max numero di non-campi del file 1000
fileSize La dimensione massima del file '8MB'
files Il numero massimo di file di campi 10
headerPairs Il numero max di intestazione key = > coppie di valori da analizzare 2000 (come http del nodo)

I limiti di byte possono essere passati come un numero o come una stringa con un prefisso appropriato.

Specificare i limiti può aiutare a proteggere il tuo sito dagli attacchi DOS (Denial of Service).

Gestione degli errori

Quando si verifica un errore, multer delegherà l’errore a express. Puoi visualizzare una bella pagina di errore usando il modo espresso standard.

Se si desidera rilevare gli errori in modo specifico da multer, è possibile chiamare la funzione themiddleware da soli.

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 })})

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.