Multer ist ein Knoten.js-Middleware für die Handhabung von multipart/form-data
, die hauptsächlich zum Hochladen von Dateien verwendet wird. Es ist geschriebenauf Busboy für maximale Effizienz.
HINWEIS: Multer verarbeitet keine Formulare, die nicht mehrteilig sind (multipart/form-data
).
Installation
npm install --save multer
Verwendung
Multer fügt dem request
Objekt ein body
Objekt und ein file
oder files
Objekt hinzu. Das body
Objekt enthält die Werte der Textfelder des Formulars, das file
oder files
Objekt enthält die über das Formular hochgeladenen Dateien.
Grundlegendes Anwendungsbeispiel:
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})
Wenn Sie ein mehrteiliges Textformular verarbeiten müssen, können Sie beispielsweise die Methode .none()
verwenden:
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
Dateiinformationen
Jede Datei enthält die folgenden Informationen:
Schlüssel | Beschreibung |
---|---|
fieldName |
Feldname im Formular angegeben |
originalName |
Name der Datei auf dem Computer des Benutzers (undefined , wenn vom Client kein Dateiname angegeben wurde) |
size |
Größe der Datei in Bytes |
stream |
Stream der Datei |
detectedMimeType |
Der erkannte MIME-Typ oder null, wenn wir nicht erkennen konnten |
detectedFileExtension |
Die typische Dateierweiterung für Dateien vom erkannten Typ oder leere Zeichenfolge, wenn wir nicht erkennen konnten (mit führenden . übereinstimmen path.extname ) |
clientReportedMimeType |
Der MIME-Typ, der vom Client mit dem Header Content-Type gemeldet wurde, oder null1, wenn der Header nicht vorhanden war |
clientReportedFileExtension |
Die Erweiterung der hochgeladenen Datei (wie von path.extname ) |
1 Currently returns text/plain
if header is absent, dies ist ein Fehler und wird in einer Patch-Version behoben. Verlassen Sie sich nicht auf dieses Verhalten.
multer(opts)
Multer akzeptiert ein Optionsobjekt, die folgenden Optionen können an Multer übergeben werden.
Schlüssel | Beschreibung |
---|---|
limits |
Grenzen der hochgeladenen Daten (vollständige Beschreibung) |
.single(fieldname)
Akzeptieren Sie eine einzelne Datei mit dem Namen fieldname
. Die einzelne Datei wird in req.file
gespeichert.
.array(fieldname)
Akzeptiert ein Array von Dateien, alle mit dem Namen fieldname
. Optional Fehler, wenn mehr als maxCount
Dateien hochgeladen werden. Das Array der Dateien wird inreq.files
gespeichert.
.fields(fields)
Akzeptieren Sie eine Mischung von Dateien, angegeben durch fields
. Ein Objekt mit Arrays von Dateienwird in req.files
gespeichert.
fields
sollte ein Array von Objekten mit name
und optional einem maxCount
.Beispiel:
.none()
Akzeptieren Sie nur Textfelder. Wenn ein Datei-Upload durchgeführt wird, wird ein Fehler mit dem Code „LIMIT_UNEXPECTED_FILE“ ausgegeben. Dies ist das gleiche wie upload.fields()
.
.any()
Akzeptiert alle Dateien, die über den Draht kommen. Ein Array von Dateien wird inreq.files
gespeichert.
WARNUNG: Stellen Sie sicher, dass Sie immer mit den Dateien umgehen, die ein Benutzer hochlädt.Fügen Sie Multer niemals als globale Middleware hinzu, da ein böswilliger Benutzer Dateien auf eine Route hochladen kann, die Sie nicht erwartet haben. Verwenden Sie diese Funktion nur auf Routen, auf denen Sie die hochgeladenen Dateien verarbeiten.
limits
Ein Objekt, das die Größenbeschränkungen der folgenden optionalen Eigenschaften angibt. Multer übergibt dieses Objekt direkt an busboy, und die Details der Eigenschaften finden Sie auf der Busboy-Seite.
Folgende Grenzwerte sind verfügbar:
Schlüssel | Beschreibung | Standard |
---|---|---|
fieldNameSize |
Max Feldname Größe | '100B' |
fieldSize |
Maximale Feldwertgröße | '8KB' |
fields |
Maximale Anzahl von Nicht-Dateifeldern | 1000 |
fileSize |
Die maximale Dateigröße | '8MB' |
files |
Die maximale Anzahl von Dateifeldern | 10 |
headerPairs |
Die maximale Anzahl der Header key=>zu analysierende Wertepaare | 2000 ( dasselbe wie das http des Knotens) |
Byte-Grenzwerte können entweder als Zahl oder als Zeichenfolge mit einem entsprechenden Präfix übergeben werden.
Durch die Angabe der Grenzwerte kann Ihre Site vor DOS-Angriffen (Denial of Service) geschützt werden.
Fehlerbehandlung
Wenn ein Fehler auftritt, delegiert multer den Fehler an express. Sie candisplay eine schöne Fehlerseite mit dem Standard-Express-Weg.
Wenn Sie Fehler speziell von multer abfangen möchten, können Sie sie aufrufenmiddleware-Funktion selbst.
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 })})