Multer är en nod.JS middleware för hantering multipart/form-data
, som främst används för att ladda upp filer. Det är skrivetpå toppen av busboy för maximal effektivitet.
OBS: Multer kommer inte att behandla någon form som inte är multipart (multipart/form-data
).
Installation
npm install --save multer
användning
Multer lägger till ett body
objekt och ett file
eller files
objekt till request
objektet. Objektet body
innehåller värdena för formulärets textfält, objektet file
eller files
innehåller filerna som laddas upp via formuläret.
grundläggande användningsexempel:
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})
om du behöver hantera en text-only multipart form kan du använda metoden .none()
, exempel:
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
filinformation
varje fil innehåller följande information:
Nyckel | beskrivning |
---|---|
fieldName |
fältnamn som anges i formuläret |
originalName |
namnet på filen på användarens dator (undefined om inget filnamn levererades av klienten) |
size |
storleken på filen i byte |
stream |
ström av fil |
detectedMimeType |
den upptäckta mime-typen, eller null om vi inte kunde upptäcka |
detectedFileExtension |
den typiska filändelsen för filer av den detekterade typen, eller tom sträng om vi misslyckades med att upptäcka (med ledande . för att matcha path.extname ) |
clientReportedMimeType |
MIME-typen som rapporterats av klienten med rubriken Content-Type eller null1 om rubriken saknades |
clientReportedFileExtension |
förlängningen av filen uppladdad (som rapporterats av path.extname ) |
1 för närvarande returnerar text/plain
om header är frånvarande, detta är en bugg och det kommer att fastställas i en patch release. Lita inte på detta beteende.
multer(opts)
Multer accepterar ett alternativ objekt, följande är de alternativ som kan bepassed till Multer.
Nyckel | beskrivning |
---|---|
limits |
gränser för uppladdade data (fullständig beskrivning) |
.single(fieldname)
Acceptera en enda fil med namnet fieldname
. Den enda filen kommer att lagrasdin req.file
.
.array(fieldname)
Acceptera en rad filer, alla med namnet fieldname
. Eventuellt fel ut ommer än maxCount
filer laddas upp. Arrayen av filer kommer att lagras ireq.files
.
.fields(fields)
Acceptera en blandning av filer, som anges av fields
. Ett objekt med matriser av filerkommer att lagras i req.files
.
fields
bör vara en rad objekt med name
och eventuellt en maxCount
.Exempel:
.none()
Acceptera endast textfält. Om någon filuppladdning görs kommer fel med koden”LIMIT_UNEXPECTED_FILE” att utfärdas. Detta är detsamma som att göra upload.fields()
.
.any()
accepterar alla filer som kommer över tråden. En rad filer kommer att lagras ireq.files
.
varning: Se till att du alltid hanterar filerna som en användare laddar upp.Lägg aldrig till multer som en global middleware eftersom en skadlig användare kunde ladda upp filer till en rutt som du inte förväntade dig. Använd endast den här funktionen på rutterdär du hanterar de uppladdade filerna.
gränser
ett objekt som anger storleksgränserna för följande valfria egenskaper. Multer skickar detta objekt direkt till busboy, och detaljerna om egenskaperna finns på busboys sida.
följande gränser är tillgängliga:
Nyckel | beskrivning | standard |
---|---|---|
fieldNameSize |
Max fältnamn storlek | '100B' |
fieldSize |
Max fältvärde storlek | '8KB' |
fields |
Max antal fält som inte är filer | 1000 |
fileSize |
max filstorlek | '8MB' |
files |
max antal filfält | 10 |
headerPairs |
max antal header nyckel=> värdepar att tolka | 2000 (samma som nodens http) |
bytesgränser kan skickas antingen som ett tal eller som en sträng med ett lämpligt prefix.
att ange gränserna kan hjälpa till att skydda din webbplats mot överbelastningsattacker (dos).
felhantering
när ett fel uppstår delegerar multer felet till express. Du kanvisa en fin felsida med standard express-sättet.
om du vill fånga fel specifikt från multer kan du ringa themiddleware-funktionen själv.
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 })})