Multer is een knooppunt.js middleware voor het verwerken van multipart/form-data
, die voornamelijk wordt gebruikt voor het uploaden van bestanden. Het is geschreven op de top van de hulpkelner voor maximale efficiëntie.
opmerking: Multer zal geen enkel formulier verwerken dat niet meerdelig is (multipart/form-data
).
installatie
npm install --save multer
gebruik
Multer voegt een body
object en een file
of files
object toe aan het request
object. Het body
object bevat de waarden van de tekstvelden van het formulier, het file
of files
object bevat de bestanden die via het formulier zijn geüpload.
Basisgebruiksvoorbeeld:
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})
In het geval dat u een tekst-only multipart formulier moet verwerken, kunt u de .none()
methode gebruiken, voorbeeld:
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
bestandsinformatie
elk bestand bevat de volgende informatie:
Toets | Beschrijving |
---|---|
fieldName |
naam van het Veld dat is opgegeven in het formulier |
originalName |
Naam van het bestand op de computer van de gebruiker (undefined als er geen bestandsnaam is geleverd door de opdrachtgever) |
size |
Grootte van het bestand in bytes |
stream |
Stream of file |
detectedMimeType |
De gedetecteerde mime-type, of null als we niet op te sporen |
detectedFileExtension |
De typische file-extensie voor bestanden van het gedetecteerde type, of de lege tekenreeks als we niet op te sporen (met toonaangevende . te passen path.extname ) |
clientReportedMimeType |
Het mime-type gerapporteerd door de cliënt met behulp van de Content-Type koptekst of null1 als de kop afwezig was |
clientReportedFileExtension |
De extensie van het bestand geüpload (zoals gerapporteerd door path.extname ) |
1 Momenteel geeft text/plain
als de kop afwezig is, is dit een bug is en zal worden vastgesteld in een patch release. Vertrouw niet op dit gedrag.
multer (opts)
Multer accepteert een options-object, de volgende opties kunnen worden toegewezen aan Multer.
sleutel | beschrijving |
---|---|
limits |
limieten van de geüploade gegevens (volledige beschrijving) |
.single(fieldname)
accepteer een enkel bestand met de naam fieldname
. Het enige bestand wordt opgeslagen in req.file
.
.array(fieldname)
accepteer een array van bestanden, allemaal met de naam fieldname
. Optioneel is er een fout opgetreden als er meer dan maxCount
bestanden worden geüpload. De reeks bestanden zal worden opgeslagen inreq.files
.
.fields(fields)
accepteer een mix van bestanden, opgegeven door fields
. Een object met arrays van bestanden zal worden opgeslagen in req.files
.
fields
moet een array van objecten zijn met name
en optioneel een maxCount
.Voorbeeld:
.none()
accepteer alleen tekstvelden. Als er een bestand upload wordt gemaakt, zal er een fout met code”LIMIT_UN EXPECTED_FILE” worden uitgegeven. Dit is hetzelfde als upload.fields()
.
.any()
accepteert alle bestanden die over de draad komen. Een reeks bestanden zal worden opgeslagen inreq.files
.
waarschuwing: Zorg ervoor dat u altijd omgaan met de bestanden die een gebruiker uploadt.Voeg nooit multer toe als een wereldwijde middleware, omdat een kwaadaardige gebruiker bestanden kon uploaden naar een route die u niet had verwacht. Gebruik deze functie alleen op routeswaar u de geüploade bestanden verwerkt.
limieten
een object dat de groottelimieten van de volgende optionele eigenschappen specificeert. Multer geeft dit object direct door aan busboy, en de details van de eigenschappen zijn te vinden op busboy ‘ s pagina.
de volgende limieten zijn beschikbaar:
Toets | Beschrijving | Standaard |
---|---|---|
fieldNameSize |
Max veld naam van de grootte | '100B' |
fieldSize |
Max veld waarde grootte | '8KB' |
fields |
Max aantal non-bestand velden | 1000 |
fileSize |
De maximale bestandsgrootte | '8MB' |
files |
Het maximale aantal bestand velden | 10 |
headerPairs |
Het max aantal kop key = >waardeparen om te ontleden | 2000 (hetzelfde als http van Node) |
Byte limieten kunnen worden doorgegeven als een getal, of als een string met een geschikt voorvoegsel.
het specificeren van de limieten kan helpen uw site te beschermen tegen denial of service (DoS) aanvallen.
foutafhandeling
wanneer er een fout optreedt, zal multer de fout delegeren aan express. U candisplay een mooie fout pagina met behulp van de standaard express manier.
Als u specifiek fouten van multer wilt vangen, kunt u de middleware-functie zelf aanroepen.
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 })})