Multer is a node.middleware js para o tratamento de multipart/form-data
, que é usado principalmente para o envio de arquivos. É writtenon no topo do busboy para a máxima eficiência.
nota: Multer não processará qualquer forma que não seja multipart (multipart/form-data
).
instalação
npm install --save multer
Utilização
Multer adiciona um objecto body
e um objecto file
ou files
objecto ao objecto request
. O objeto body
contém os valores dos campos de texto do formulário, o objeto file
ou files
contém os arquivos enviados através do formulário.
Basic exemplo de utilização:
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})
Em caso de necessidade de lidar com um texto apenas com diversas partes de formulário, você pode usar o .none()
método, exemplo:
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ções do Arquivo
Cada arquivo contém as seguintes informações:
Tecla | Descrição |
---|---|
fieldName |
nome do Campo especificado no formulário |
originalName |
Nome do arquivo no computador do usuário (undefined se nenhum nome de arquivo fornecido pelo cliente) |
size |
Tamanho do ficheiro em bytes |
stream |
Stream do arquivo |
detectedMimeType |
detectado mime-type, ou null, se não conseguimos detectar |
detectedFileExtension |
O típico extensão de arquivo para arquivos do detectados tipo, ou seqüência de caracteres vazia, se não conseguimos detectar com os principais . para correspondência path.extname ) |
clientReportedMimeType |
O tipo de mime comunicado pelo cliente, usando o Content-Type cabeçalho, ou null1 se o cabeçalho estava ausente |
clientReportedFileExtension |
A extensão do arquivo carregado (como relatado por path.extname ) |
1 Atualmente retorna text/plain
se o cabeçalho estiver ausente, este é um erro e será corrigido em um patch de versão. Não confie neste comportamento.
multer(opts)
Multer aceita um objeto de Opções, as seguintes são as opções que podem ser acumuladas para Multer.
Tecla | Descrição |
---|---|
limits |
Limites de upload e de dados (descrição completa) |
.single(fieldname)
Aceitar um único arquivo com o nome fieldname
. The single file will be storedin req.file
.
.array(fieldname)
aceitar uma lista de arquivos, todos com o nome fieldname
. Opcionalmente erro se mais de maxCount
arquivos são enviados. O array de arquivos será armazenado emreq.files
.
.fields(fields)
aceitar uma mistura de ficheiros, indicada por fields
. Um objeto com matrizes de arquivos será armazenado em req.files
.
fields
deve ser um conjunto de objetos com name
e opcionalmente um maxCount
.Exemplo:
.none()
aceitar apenas campos de texto. Se for feito o envio de qualquer ficheiro, será emitido um erro com o código”LIMIT_ UNEXPECTED_ file”. Isto é o mesmo que fazer upload.fields()
.
.any()
aceita todos os arquivos que vêm por cima do fio. Um array de arquivos será armazenado emreq.files
.
aviso: Certifique-se de que você sempre lidar com os arquivos que um usuário uploads.Nunca adicione multer como um middleware global, uma vez que um usuário malicioso poderia uploadfiles para uma rota que você não antecipou. Use apenas esta função em roteswhere você está lidando com os arquivos enviados.
limites
um objecto que especifica os limites de tamanho das seguintes propriedades opcionais. Multer passa este objeto para o busboy diretamente, e os detalhes das propriedades podem ser encontrados na página do busboy.
estão disponíveis os seguintes limites::
Tecla | Descrição | Padrão |
---|---|---|
fieldNameSize |
Max nome do campo tamanho | '100B' |
fieldSize |
Máximo valor do campo tamanho | '8KB' |
fields |
número Máximo de não-campos do arquivo | 1000 |
fileSize |
O tamanho máximo do arquivo | '8MB' |
files |
O número máximo de campos do arquivo | 10 |
headerPairs |
O número máximo de cabeçalho chave= >pares de valores para processar | 2000 (o mesmo que o HTTP do nó) |
limites de Bytes podem ser passados como um número, ou como uma cadeia com um prefixo apropriado.
especificar os limites pode ajudar a proteger o seu site contra ataques de negação de serviço (dos).
tratamento de erros
quando encontrar um erro, multer irá delegar o erro para expressar. Você pode mostrar uma boa Página de erro usando a forma expressa padrão.
se você quiser pegar erros especificamente de multer, você pode chamar a função de ‘iddleware’ por si mesmo.
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 })})