Multer est un nœud.middleware js pour la gestion de multipart/form-data, qui est principalement utilisé pour le téléchargement de fichiers. Il est écrit sur le dessus du busboy pour une efficacité maximale.

REMARQUE: Multer ne traitera aucun formulaire qui n’est pas multipart (multipart/form-data).

Installation

npm install --save multer

Utilisation

Multer ajoute un objet body et un objet file ou files à l’objet request. L’objet body contient les valeurs des champs de texte du formulaire, l’objet file ou files contient les fichiers téléchargés via le formulaire.

Exemple d’utilisation de base:

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

Dans le cas où vous devez gérer un formulaire en plusieurs parties uniquement en texte, vous pouvez utiliser la méthode .none(), par exemple:

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

Informations sur le fichier

Chaque fichier contient les informations suivantes:

Clé Description
fieldName Nom du champ spécifié dans le formulaire
originalName Nom du fichier sur l’ordinateur de l’utilisateur (undefined si aucun nom de fichier n’a été fourni par le client)
size Taille du fichier en octets
stream Flux de fichiers
detectedMimeType Le type mime détecté, ou null si nous n’avons pas réussi à détecter
detectedFileExtension L’extension de fichier typique pour les fichiers du type détecté, ou chaîne vide si nous n’avons pas réussi à détecter (avec . pour correspondre path.extname)
clientReportedMimeType Le type mime signalé par le client à l’aide de l’en-tête Content-Type, ou null1 si l’en-tête était absent
clientReportedFileExtension L’extension du fichier téléchargé (comme indiqué par path.extname)

1 Renvoie actuellement text/plain si l’en-tête est absent, il s’agit d’un bogue et il sera corrigé dans une version de correctif. Ne vous fiez pas à ce comportement.

multer(opts)

Multer accepte un objet options, voici les options qui peuvent être passées à Multer.

Clé Description
limits Limites des données téléchargées (description complète)

.single(fieldname)

Acceptez un seul fichier avec le nom fieldname. Le fichier unique sera stocké dans req.file.

.array(fieldname)

Acceptez un tableau de fichiers, tous avec le nom fieldname. Erreur optionnelle si plus de maxCount fichiers sont téléchargés. Le tableau de fichiers sera stocké dans req.files.

.fields(fields)

Accepter un mélange de fichiers, spécifié par fields. Un objet avec des tableaux de fichiersera stocké dans req.files.

fields doit être un tableau d’objets avec name et éventuellement un maxCount.Exemple:

.none()

N’acceptez que les champs de texte. Si un téléchargement de fichier est effectué, une erreur avec le code « LIMIT_UNEXPECTED_FILE » sera émise. C’est la même chose que de faire upload.fields().

.any()

Accepte tous les fichiers qui passent par le fil. Un tableau de fichiers sera stocké dans req.files.

AVERTISSEMENT: Assurez-vous de toujours gérer les fichiers qu’un utilisateur télécharge.N’ajoutez jamais de multer en tant que middleware global, car un utilisateur malveillant pourrait télécharger des fichiers sur une route que vous n’aviez pas prévue. Utilisez cette fonction uniquement sur les routesoù vous gérez les fichiers téléchargés.

limits

Un objet spécifiant les limites de taille des propriétés optionnelles suivantes. Multer passe directement cet objet dans busboy, et les détails des propriétés se trouvent sur la page de busboy.

Les limites suivantes sont disponibles:

Clé Description Par défaut
fieldNameSize Taille maximale du nom du champ '100B'
fieldSize Taille maximale de la valeur du champ '8KB'
fields Nombre maximum de champs non liés au fichier 1000
fileSize La taille maximale du fichier '8MB'
files Le nombre maximum de champs de fichier 10
headerPairs Le nombre maximum d’en-tête key=> paires de valeurs à analyser 2000 ( identique au http du nœud)

Les limites d’octets peuvent être passées soit sous forme de nombre, soit sous forme de chaîne avec un préfixe approprié.

La spécification des limites peut aider à protéger votre site contre les attaques par déni de service (DoS).

Gestion des erreurs

En cas d’erreur, multer déléguera l’erreur à express. Vous pouvezafficher une belle page d’erreur en utilisant la voie express standard.

Si vous souhaitez détecter des erreurs spécifiquement de multer, vous pouvez appeler la fonction themiddleware par vous-même.

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.