Multer je uzel.JS middleware pro zpracování multipart/form-data
, který se primárně používá pro nahrávání souborů. To je writtenon vrcholu busboy pro maximální efektivitu.
poznámka: Multer nebude zpracovávat žádný formulář, který není vícedílný (multipart/form-data
).
instalace
npm install --save multer
použití
Multer přidá objekt body
a objekt file
nebo files
k objektu request
. Objekt body
obsahuje hodnoty textových polí formuláře, objekt file
nebo files
obsahuje soubory nahrané prostřednictvím formuláře.
základní příklad použití:
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})
v případě, že potřebujete zpracovat vícedílný formulář pouze pro text, můžete použít metodu .none()
, příklad:
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
informace o souboru
každý soubor obsahuje následující informace:
klíč | popis |
---|---|
fieldName |
název pole uvedený ve formuláři |
originalName |
název souboru v počítači uživatele (undefined , pokud klient neposkytl název souboru) |
size |
Velikost souboru v bajtech |
stream |
proud souboru |
detectedMimeType |
detekovaný mime-typ, nebo null, pokud se nám nepodařilo zjistit |
detectedFileExtension |
typická přípona souboru pro soubory nebo prázdný řetězec, pokud se nám nepodařilo detekovat (s vedoucím . k shodě path.extname ) |
clientReportedMimeType |
typ mime hlášený klientem pomocí záhlaví Content-Type nebo null1, pokud hlavička chyběla |
clientReportedFileExtension |
přípona nahraného souboru (jak uvádí path.extname ) |
1 aktuálně vrací text/plain
pokud hlavička chybí, jedná se o chybu a bude opravena ve vydání opravy. Nespoléhejte se na toto chování.
multer (opts)
Multer přijímá objekt voleb, následující jsou možnosti, které lze předávat Multeru.
klíč | popis |
---|---|
limits |
limity nahraných dat (úplný popis) |
.single(fieldname)
přijměte jeden soubor s názvem fieldname
. Jeden soubor bude uloženv req.file
.
.array(fieldname)
přijměte pole souborů, Všechny s názvem fieldname
. Volitelně chyba, pokudvíce než maxCount
soubory jsou nahrány. Pole souborů bude uloženo vreq.files
.
.fields(fields)
přijměte kombinaci souborů zadaných fields
. Objekt s poli souborůbude uložen v req.files
.
fields
by mělo být pole objektů s name
a případně maxCount
.Příklad:
.none()
přijměte pouze textová pole. Pokud dojde k nahrání souboru, bude vydána chyba s kódem“LIMIT_UNEXPECTED_FILE“. To je stejné jako dělat upload.fields()
.
.any()
přijímá všechny soubory, které přicházejí přes drát. Pole souborů bude uloženo vreq.files
.
varování: Ujistěte se, že vždy zpracováváte soubory, které uživatel nahraje.Nikdy nepřidávejte multer jako globální middleware, protože škodlivý uživatel mohl nahrát soubory na trasu, kterou jste neočekávali. Tuto funkci používejte pouze na trasách, kde zpracováváte nahrané soubory.
limity
objekt určující meze velikosti následujících volitelných vlastností. Multer předává tento objekt do busboy přímo, a podrobnosti o vlastnostech lze nalézt na stránce busboy je.
k dispozici jsou následující limity:
klíč | popis | výchozí |
---|---|---|
fieldNameSize |
maximální velikost názvu pole | '100B' |
fieldSize |
maximální velikost hodnoty pole | '8KB' |
fields |
maximální počet polí mimo soubor | 1000 |
fileSize |
maximální velikost souboru | '8MB' |
files |
maximální počet polí souborů | 10 |
headerPairs |
maximální počet záhlaví klíč=>páry hodnot pro analýzu | 2000 (stejné jako http uzlu) |
limity bajtů lze předat buď jako číslo, nebo jako řetězec s příslušnou předponou.
určení limitů může pomoci chránit váš web před útoky typu denial of service (DoS).
zpracování chyb
když dojde k chybě, multer deleguje chybu na express. Můžete přehrát pěknou chybovou stránku pomocí standardního expresního způsobu.
pokud chcete zachytit chyby konkrétně z multeru, můžete je nazývatmiddleware funkce sami.
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 })})