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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.