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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.