Cursos / Informática para Internet / Desenvolvimento Backend / Aula

arrow_back Aula 08 - Upload de arquivos

Melhorando controle do upload


Até o momento o upload está sendo feito, mas ainda não é possível controlá-lo muito bem. Por exemplo, o arquivo de upload gera um nome aleatório e sem extensão. Para melhorar isso, acompanhe a aula e realize as alterações necessárias.

Utilizando o DiskStorage

O mecanismo de armazenamento em disco ajudará a controlar o local onde será guardado o arquivo. Para isso, é necessário adicionar as seguintes instruções no código do arquivo posts.rota.js.

    var storage = multer.diskStorage({
            destination: function (req, file, cb) {
                cb(null, 'public/uploads')
            },
            filename: function (req, file, cb) {
                 cb(null, file.fieldname + "-" + Date.now() + path.extname(file.originalname)) 
            }
    })

Criando o filtro de extensões

Seguindo os passos anteriores, o nome do arquivo e o destino já estão sendo controlados. Porém, o upload ainda aceita todos os tipos de arquivo e isso não é interessante para a aplicação.

Para mudar isso, acompanhe a aula e crie, ainda em posts.rota.js, a seguinte função:

    const fileFilter = (req, file, cb) => {
            const extensoes = /jpeg|jpg/i
            if (extensoes.test(path.extname(file.originalname))){
                    cb(null, true)
            }else{
                    return cb('Arquivo não suportado. Apenas jpg e jpeg são suportados.')
            }
    }

Após isso, altere a inicialização do multer para efetivar as mudanças. Deve ficar dessa maneira:

    var upload = multer({ storage: storage, fileFilter: fileFilter })

Permitindo o acesso do usuário ao arquivo

Para finalizar, é interessante permitir que o usuário tenha acesso aos arquivos da pasta public. Para fazer isso, acompanhe a aula e adicione o seguinte código ao arquivo index.js:

    app.use('/static', express.static('public'))

Versão 5.3 - Todos os Direitos reservados