fbpx

Aprenda como adicionar fotos no Node.js utilizando o Multer

Existem três métodos principais para lidar com uploads de arquivos no Node.js: salvar as imagens em seu servidor, salvar as informações binárias da imagem ou informações de string base64 em seu banco de dados e utilizar os baldes Amazon Internet Service (AWS) S3 para salvar muitos e manuseie suas fotos.


Aqui você encontrará maneiras de usar Multer, um middleware Node.js, para adicionar e salvar imagens em seu servidor em funções Node.js em algumas etapas.


Passo 1: Configurando a Atmosfera de Crescimento

O código usado nesta missão está acessível em um repositório GitHub e é gratuito para que você possa usar sob a licença do MIT.

Primeiro, crie uma pasta de missão e transfira para ela operando o próximo comando:

mkdir multer-tutorial
cd multer-tutorial

Em seguida, inicialize o npm em sua lista de missões executando:

npm init -y

Posteriormente, você precisará colocar algumas dependências. As dependências necessárias para este tutorial abrangem:

  • Categorical : Categorical é uma estrutura Node.js que fornece um conjunto robusto de opções para funções de célula e internet. Isso simplifica a construção de funções de back-end com o Node.js.
  • Multer : Multer é um middleware categórico que simplifica a importação e salvamento de imagens em seu servidor.

Configure os pacotes com o supervisor de negociação de pacotes de nós operando:

npm set up categorical multer

Em seguida, crie um arquivo app.js na lista raiz de sua missão e adicione o bloco de código abaixo para criar um servidor categórico primário:


const categorical = require('categorical');
const app = categorical();
const port = course of.env.PORT || 3000;
app.hear(port, ()=>{
console.log(`App is listening on port ${port}`);
});

Etapa 2: Configurando o Multer

Primeiro, importe o multer em seu arquivo app.js.

const multer = require("multer");

Multer requer um mecanismo de armazenamento que inclui detalhes sobre a listagem de onde os dados de registros carregados serão salvos e como os dados de registros serão nomeados.

Um mecanismo de armazenamento multer é criado chamando a metodologia diskStorage no módulo multer importado . Essa metodologia retorna uma implementação StorageEngine configurada para armazenar dados de registros no sistema de arquivos nativo.

É necessário um objeto de configuração com duas propriedades: local de férias , que é uma string ou função que especifica o local em que as imagens carregadas serão salvas.

A segunda propriedade, filename , é uma operação que determina os nomes dos dados dos registros carregados. Leva três parâmetros: req , file e um callback ( cb ). req é o objeto de solicitação categórica , file é um objeto que contém detalhes sobre o arquivo processado e cb é um retorno de chamada que determina os nomes dos dados de registros carregados. A operação de retorno de chamada recebe o erro e o nome do arquivo como argumentos.

Adicione o bloco de código abaixo ao seu arquivo app.js para criar um mecanismo de armazenamento:


const storageEngine = multer.diskStorage({
vacation spot: "./pictures",
filename: (req, file, cb) => {
cb(null, `${Date.now()}--${file.originalname}`);
},
});

No bloco de código acima, você define a propriedade do local de férias como ” ./pictures ”, portanto, as fotos provavelmente serão salvas na listagem de sua missão em uma pasta de fotos . Então, no retorno de chamada, você forneceu null como o erro e uma string de modelo como o título do arquivo. A string do modelo consiste em um carimbo de data/hora gerado chamando Date.now() para garantir que os nomes das imagens sejam sempre distintos, dois hífens para separar o nome do arquivo e o carimbo de data/hora e o título autêntico do arquivo, que pode ser acessado a partir do objeto de arquivo .

As strings resultantes deste modelo aparecerão assim: 1663080276614–example.jpg .

Em seguida, é bom inicializar Multer com o mecanismo de armazenamento.

Adicione o bloco de código abaixo ao seu arquivo app.js para inicializar o multer com o mecanismo de armazenamento:


const add = multer({
storage: storageEngine,
});

multer retorna uma ocasião Multer que fornece uma série de estratégias para produzir middleware que processa dados de registros carregados no formato multipart/form-data .

No bloco de código acima, você cruza um objeto de configuração com uma propriedade de armazenamento definida como storageEngine , que é o mecanismo de armazenamento que você criou anteriormente.

No momento, a configuração do Multer está completa, mas não há diretrizes de validação que garantam que apenas imagens sejam salvas em seu servidor.

Passo 3: Incluindo Diretrizes de Validação de Imagem

A principal regra de validação que você pode adicionar é a medida máxima permitida para que uma imagem seja carregada em seu utilitário.

Substitua seu objeto de configuração Multer pelo bloco de código abaixo:

const add = multer({
storage: storageEngine,
limits: { fileSize: 1000000 },
});

No bloco de código acima, você adicionou uma propriedade de limites ao objeto de configuração. Esta propriedade é um objeto que especifica limites variados nas informações recebidas. Você define a propriedade fileSize , com a qual a medida máxima do arquivo em bytes é de cerca de 1000000 , que é igual a 1 MB.

Outra regra de validação que você pode adicionar é a propriedade fileFilter , um recurso disponível opcionalmente para regular quais dados de registros são carregados. Esta operação é conhecida como para cada arquivo que é processado. Esta operação leva os mesmos parâmetros porque a operação de nome de arquivo : req , file e cb .

Para tornar seu código mais limpo e mais reutilizável, você resumirá toda a lógica de filtragem em uma operação.

Adicione o bloco de código abaixo ao seu arquivo app.js para implementar a lógica de filtragem de arquivo:

const path = require("path");
const checkFileType = operate (file, cb) {
const fileTypes = /jpeg|jpg|png|gif|svg/;
//test extension names
const extName = fileTypes.check(path.extname(file.originalname).toLowerCase());
const mimeType = fileTypes.check(file.mimetype);
if (mimeType && extName) {
return cb(null, true);
} else {
cb("Error: You possibly can Solely Add Photos!!");
}
};

A operação checkFileType usa dois parâmetros: file e cb .

No bloco de código acima, você delineou uma variável fileTypes que armazena uma expressão regex com as extensões de arquivo de imagem permitidas. Em seguida, você conhece a metodologia de verificação na expressão regex.

A metodologia de verificação procura uma correspondência na string entregue e retorna verdadeiro ou falso , dependendo se encontra ou não uma correspondência. Em seguida, você cruza o título do arquivo carregado, que você inserirá por meio de file.originalname , na metodologia extname do módulo da trilha , que retorna a extensão do caminho da string para ele. Por fim, você encadeia a string JavaScript toLowerCase para operar a expressão para lidar com imagens com seus nomes de extensão em letras maiúsculas.

Verificar apenas o título da extensão não é suficiente, pois os nomes das extensões podem ser simplesmente editados. Para garantir que apenas as imagens sejam carregadas, é necessário testar o tipo MIME também. Você pode acessar a propriedade mimetype de um arquivo por meio de file.mimetype . Portanto, você testa a propriedade mimetype utilizando a metodologia de verificação , como provavelmente fez para os nomes de extensão.

Se as 2 circunstâncias retornarem true, você retornará o callback com null e true, caso contrário, retornará o callback com um erro.

Por fim, você adiciona a propriedade fileFilter à sua configuração do multer.

const add = multer({
storage: storageEngine,
limits: { fileSize: 10000000 },
fileFilter: (req, file, cb) => {
checkFileType(file, cb);
},
});

Passo 4: Utilizando o Multer como um Middleware Categórico

Em seguida, é necessário implementar manipuladores de rota que lidarão com os uploads de imagens.

Multer pode lidar com cada um e vários uploads de imagens dependendo da configuração.

Adicione o bloco de código abaixo ao seu arquivo app.js para criar um manipulador de rota para uploads de imagens únicas:

app.put up("/single", add.single("picture"), (req, res) => {
if (req.file) {
res.ship("Single file uploaded efficiently");
} else {
res.standing(400).ship("Please add a sound picture");
}
});

No bloco de código acima, você conhece a metodologia única na variável add , que armazena a configuração do multer. Esta metodologia retorna um middleware que processa um “arquivo único” relacionado à disciplina de tipo dada. Então, você entregou a imagem como a disciplina de forma.

Por fim, teste se um arquivo foi carregado por meio do objeto req na propriedade do arquivo . Se foi, você envia uma mensagem de sucesso, caso contrário, você envia uma mensagem de erro.

Adicione o bloco de código abaixo ao seu arquivo app.js para criar um manipulador de rota para vários uploads de imagens:

app.put up("/a number of", add.array("pictures", 5), (req, res) => {
if (req.recordsdata) {
res.ship("Muliple recordsdata uploaded efficiently");
} else {
res.standing(400).ship("Please add a sound pictures");
}
});

No bloco de código acima, você conhece a metodologia de array na variável add , que armazena a configuração do multer. Essa metodologia usa dois argumentos – um título de disciplina e uma dependência máxima – e retorna um middleware que processa vários dados de registros que compartilham o mesmo título de disciplina. Então, você entregou fotos porque a disciplina de tipo compartilhado e 5 como a maior variedade de fotos que podem ser carregadas sem demora.

Benefícios da utilização do Multer

A utilização do Multer em suas funções Node.js simplifica os meios sofisticados de importar e salvar imagens diretamente em seu servidor. O Multer também pode ser baseado principalmente no busboy, um módulo Node.js para analisar informações de tipo recebidas, tornando-o muito amigável ao meio ambiente para analisar informações de tipo.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Scroll to Top