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

Deixe uma resposta

O seu endereço de email não será publicado.