Fala aí Clovis, tudo bem? Para fazer isso você vai precisar do multer
e NodeJS
.
Para configurar o multer
com Express, pode fazer o seguinte:
const DIRETORIO = "PASTA_PARA_SALVAR";
const multer = require("multer");
const upload = multer({dest : DIRETORIO});
app.set("upload", upload);
app.use(multer({dest : DIRETORIO}).any());
Basicamente estamos configurando o multer, passando onde ele deve salvar as imagens e dizendo para o Express usá-lo.
Agora, no controller, você pode fazer o seguinte:
const slug = require("slug");
upload : (req, res) => {
req.files.forEach(file => {
let nomeSlug = slug(file.originalname.substring(0, file.originalname.indexOf("."))).toLowerCase() + file.originalname.substring(file.originalname.indexOf("."))
arquivo.create({
nome : file.originalname,
slug : nomeSlug,
}).then(() => {
fs.readFile(file.path, (erro, dados) => {
if (erro) {
console.log(erro);
throw erro;
}
let destino = pathModule.join(file.destination, nomeSlug);
let stream = fs.createWriteStream(destino);
stream.write(dados);
stream.end();
fs.unlink(file.path);
});
}).catch(error => {
console.log(error);
res.status(500).json(error);
});
});
res.status(201).end();
}
Primeiro cria um novo registro no MongoDB, o registro será inserido na collection de imagens com um nome
e slug
(para fazer o download).
Caso a criação deu certo, através do NodeJS é lido os arquivos enviados e salvos no servidor.
É mais ou menos essa a ideia, esse código é de um projeto antigo, mas atualmente não deve fugir muito disso.
Espero ter ajudado.