Multer Er en node.js mellomvare for håndtering multipart/form-data
, som primært brukes til opplasting av filer. Den er skrevetpå toppen av ryddegutten for maksimal effektivitet.
Merk: Multer vil ikke behandle noen form som ikke er multipart (multipart/form-data
).
Installasjon
npm install --save multer
Bruk
Multer legger til et body
objekt og et file
eller files
objekt til request
– objektet. body
– objektet inneholder verdiene for tekstfeltene i skjemaet, file
eller files
– objektet inneholder filene som lastes opp via skjemaet.
Eksempel På Grunnleggende bruk:
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})
i tilfelle du trenger å håndtere en tekst-bare flerdelt skjema, kan du bruke metoden .none()
, eksempel:
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
Filinformasjon
hver fil inneholder følgende informasjon:
Nøkkel | Beskrivelse |
---|---|
fieldName |
Feltnavn angitt i skjemaet |
originalName |
Navnet på filen på brukerens datamaskin (undefined hvis ingen filnavn ble levert av klienten) |
size |
Størrelsen på filen i byte |
stream |
Strøm av fil |
detectedMimeType |
den oppdagede mime-typen, eller null hvis vi ikke klarte å oppdage |
detectedFileExtension |
den typiske filtypen for filer av den oppdagede typen, eller tom streng hvis vi ikke klarte å oppdage (med ledende . for å matche path.extname ) |
clientReportedMimeType |
mime-typen rapportert av klienten ved hjelp av Content-Type header, eller null1 hvis header var fraværende |
clientReportedFileExtension |
utvidelsen av filen lastet opp (som rapportert av path.extname ) |
1 Foreløpig returnerer text/plain
hvis header er fraværende, er dette en bug, og det vil bli fikset i en patch utgivelse. Ikke stole på denne oppførselen.
multer (opts)
Multer godtar et alternativobjekt, følgende er alternativene som kan overføres Til Multer.
Nøkkel | Beskrivelse |
---|---|
limits |
Grenser for opplastede data (full beskrivelse) |
.single(fieldname)
Godta en enkelt fil med navnet fieldname
. Den eneste filen vil bli lagret req.file
.
.array(fieldname)
Godta en rekke filer, alle med navnet fieldname
. Eventuelt feil ut ifmore enn maxCount
filer lastes opp. Matrisen av filer vil bli lagret ireq.files
.
.fields(fields)
Godta en blanding av filer, spesifisert av fields
. Et objekt med arrays av filervil bli lagret i req.files
.
fields
skal være en rekke objekter med name
og eventuelt en maxCount
.Eksempel:
.none()
Godta bare tekstfelt. Hvis noen filopplasting er gjort, vil feil med kode»LIMIT_UNEXPECTED_FILE» bli utstedt. Dette er det samme som å gjøre upload.fields()
.
.any()
Godtar alle filer som kommer over ledningen. En rekke filer vil bli lagret ireq.files
.
ADVARSEL: Pass på at du alltid håndterer filene som en bruker laster opp.Aldri legge multer som en global mellomvare siden en ondsinnet bruker kan uploadfiles til en rute som du ikke forutse. Bruk bare denne funksjonen på ruterhvor du håndterer de opplastede filene.
grenser
et objekt som angir størrelsesgrensene for følgende valgfrie egenskaper. Multer passerer dette objektet inn i ryddegutt direkte, og detaljene i egenskapene kan bli funnet på rydegutt side.
følgende grenser er tilgjengelige:
Nøkkel | Beskrivelse | Standard |
---|---|---|
fieldNameSize |
Maks feltnavn størrelse | '100B' |
fieldSize |
Maks feltverdi størrelse | '8KB' |
fields |
Maks antall ikke-filfelt | 1000 |
fileSize |
maks filstørrelse | '8MB' |
files |
maks antall filfelt | 10 |
headerPairs |
maks antall header nøkkel=> verdipar å analysere | 2000 (samme Som Nodes http) |
Bytes grenser kan sendes enten som et tall eller som en streng med et passende prefiks.
Angi grensene kan bidra til å beskytte nettstedet ditt mot tjenestenektangrep(DoS).
Feilhåndtering
når det oppstår en feil, vil multer delegere feilen til express. Du candisplay en fin feil side ved hjelp av standard express måte.
hvis du vil fange feil spesifikt fra multer, kan du ringe tilmiddleware-funksjonen selv.
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 })})