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

Lämna ett svar

Din e-postadress kommer inte publiceras.