Multer este un nod.JS middleware pentru manipularea multipart/form-data, care este utilizat în principal pentru încărcarea fișierelor. Este scrispe partea de sus a busboy pentru eficiență maximă.

notă: Multer nu va procesa nici o formă care nu este multipart (multipart/form-data).

instalare

npm install --save multer

utilizare

Multer adaugă un obiect body și un obiect file sau files la obiectul request. Obiectul body conține valorile câmpurilor de text ale formularului, obiectul file sau files conține fișierele încărcate prin formular.

exemplu de utilizare de bază:

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

în cazul în care trebuie să gestionați un formular multipart numai text, puteți utiliza metoda .none(), exemplu:

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

Informații fișier

fiecare fișier conține următoarele informații:

cheie descriere
fieldName numele câmpului specificat în formular
originalName numele fișierului de pe computerul utilizatorului (undefined dacă Niciun nume de fișier nu a fost furnizat de client)
size Dimensiunea fișierului în octeți
stream flux de fișier
detectedMimeType tipul MIME detectat sau null dacă nu am reușit să detectăm
detectedFileExtension extensia tipică de fișier pentru fișiere de tipul detectat sau șirul gol dacă nu am reușit să detectăm (cu conducerea . pentru a se potrivi path.extname)
clientReportedMimeType tipul mime raportat de client folosind Content-Type antet, sau null1 în cazul în care antetul a fost absent
clientReportedFileExtension extensia fișierului încărcat (raportat de path.extname)

1 returnează în prezent text/plain dacă antetul este absent, acesta este un bug și va fi remediat într-o versiune de patch-uri. Nu vă bazați pe acest comportament.

multer(opts)

Multer acceptă un obiect opțiuni, următoarele sunt opțiunile care pot trece la Multer.

cheie descriere
limits limitele datelor încărcate (descriere completă)

.single(fieldname)

acceptați un singur fișier cu numele fieldname. Fișierul unic va fi stocatîn req.file.

.array(fieldname)

acceptați o serie de fișiere, toate cu numele fieldname. Opțional eroare ifmai mult de maxCount fișierele sunt încărcate. Matricea de fișiere va fi stocată înreq.files.

.fields(fields)

acceptați un amestec de fișiere, specificat de fields. Un obiect cu matrice de fișiereva fi stocat în req.files.

fields ar trebui să fie o serie de obiecte cu nameși opțional un maxCount.Exemplu:

.none()

acceptați numai câmpurile de text. Dacă se face o încărcare de fișiere, va fi emisă o eroare cu codul”LIMIT_UNEXPECTED_FILE”. Acest lucru este la fel ca a face upload.fields().

.any()

acceptă toate fișierele care vine peste sârmă. O serie de fișiere vor fi stocate înreq.files.

avertisment: Asigurați-vă că gestionați întotdeauna fișierele pe care un utilizator le încarcă.Nu adăugați niciodată multer ca middleware global, deoarece un utilizator rău intenționat ar putea încărca fișiere pe o rută pe care nu ați anticipat-o. Utilizați această funcție numai pe routeswhere sunteți de manipulare fișierele încărcate.

limite

un obiect care specifică limitele de dimensiune ale următoarelor proprietăți opționale. Multer trece acest obiect direct în busboy, iar detaliile proprietăților pot fi găsite pe pagina busboy.

sunt disponibile următoarele limite:

cheie descriere implicit
fieldNameSize dimensiunea maximă a numelui câmpului '100B'
fieldSize dimensiunea maximă a valorii câmpului '8KB'
fields numărul maxim de câmpuri non-fișier 1000
fileSize dimensiunea maximă a fișierului '8MB'
files numărul maxim de câmpuri de fișiere 10
headerPairs numărul maxim de antet cheie = >perechi de valori pentru a analiza 2000 (la fel ca http Node)

limitele de octeți pot fi transmise fie ca număr, fie ca un șir cu un prefix adecvat.

specificarea limitelor vă poate ajuta să vă protejați site-ul împotriva atacurilor denial of service (DoS).

eroare de manipulare

atunci când se confruntă cu o eroare, multer va delega eroarea de a exprima. Putețiafișați o pagină de eroare frumoasă utilizând modul expres standard.

dacă doriți să prindeți erori în mod specific de la multer, puteți apelafuncția middleware de unul singur.

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

Lasă un răspuns

Adresa ta de email nu va fi publicată.