UPLOAD ARQUIVOS [RESOLVIDO]

1. UPLOAD ARQUIVOS [RESOLVIDO]

Vinicius
alli

(usa Outra)

Enviado em 15/11/2019 - 20:56h

Ola boa noite tenho uma duvida...
essa funcao que salva no diretorio de imagem e no campo imagem do banco funciona perfeitamente, porem eu preciso salvar outro tipo de arquivo ai eu uso o mesmo
metodo, e passo o nome do campo novo que e video, e o diretorio, porem ela n funciona....
alguem pode me explica o porque e como consigo enviar 2 tipos de arquivos de uma vez só porem com imput diferentes para o mesmo banco

app.post("/noticias/nova", (req, res) => {
const {
imagem
} = req.files


imagem.mv(path.resolve(__dirname, 'public/upload/noticias', imagem.name), (error) => {
Noticias.create({
...req.body,
imagem: `/noticias/${imagem.name}`
}, (error, Noticias) => {
res.redirect('/');
});
})
});




app.post("/noticias/nova", (req, res) => {
const {
video
} = req.files.


video.mv(path.resolve(__dirname, 'public/upload/video', video.name), (error) => {
Noticias.create({
...req.body,
video: `/noticias/${video.name}`
}, (error, Noticias) => {
res.redirect('/');
});
})
});



  


2. Re: UPLOAD ARQUIVOS [RESOLVIDO]

Ruan
ru4n

(usa Debian)

Enviado em 17/11/2019 - 14:00h

Nesse caso ai, o ideal seria escrever duas rotas; uma para imagem e outra para vídeo. Por exemplo:
app.post('/noticias/nova/imagem', (req, res) => {
// Tratamento para arquivos de imagem
...
});

app.post('/noticias/nova/video', (req, res) => {
// Tratamento para arquivos de video
...
});


Ou se preferir usar a mesma rota, deverá tratar o tipo de arquivo antes de mover e cadastrar a notícia. Nesse exemplo abaixo estou tratando através da extensão do arquivo:

app.post('/noticias/nova', (req, res) => {
const { file } = req.files;

// Pega a extensão do arquivo
const extension = file.name.split('.').pop();

// Extensões de imagem permitdas:
const imagens = ['jpg', 'png', 'jpeg'];

// Extensões de vídeo permitidas
const videos = ['mp4', 'avi', 'mov'];

// Define o caminho base de destino do arquivo
const filePath = 'public/upload';

// Caminho completo do arquivo que será tratado (imagem ou video)
let dstFile = null;

// Tipo de arquivo
let fileType = '';

// Verifica se o arquivo enviado é uma imagem
if(imagens.includes(extension)) {
dstFile = `${filePath}/noticias`;
fileType = 'imagem';
}
// Caso contrário, verifica se o arquivo enviado é um vídeo
else if (videos.includes(extension)) {
dstFile = `${filePath}/video`;
fileType = 'video';
}

// Cadastra a notícia
if(dstFile != null) {
if(fileType === 'imagem') {
Noticias.create({
...req.body,
imagem: dstFile
}, (error, Noticias) => {
res.redirect('/');
});
}
else if (fileType === 'video') {
Noticias.create({
...req.body,
video: dstFile
}, (error, Noticias) => {
res.redirect('/');
});
}
}

// Finaliza a requisição
res.status(200).end();
});



3. erro

Vinicius
alli

(usa Outra)

Enviado em 17/11/2019 - 23:44h

Olá boa noite.. muito obrigado pela ajuda..


eu coloquei cmo no exemplo que vc me passo ele me apareceu esse erro

TypeError: Cannot read property 'name' of undefined
at /home/allison/Documentos/8 SEM/Projet_Integrador/node_video/PantaneiroEcologico-Desenvolvendo/app.js:219:27
at Layer.handle [as handle_request] (/home/allison/Documentos/8 SEM/Projet_Integrador/node_video/PantaneiroEcologico-Desenvolvendo/node_modules/express/lib/router/layer.js:95:5)
at next (/home/allison/Documentos/8 SEM/Projet_Integrador/node_video/PantaneiroEcologico-Desenvolvendo/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/home/allison/Documentos/8 SEM/Projet_Integrador/node_video/PantaneiroEcologico-Desenvolvendo/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/home/allison/Documentos/8 SEM/Projet_Integrador/node_video/PantaneiroEcologico-Desenvolvendo/node_modules/express/lib/router/layer.js:95:5)
at /home/allison/Documentos/8 SEM/Projet_Integrador/node_video/PantaneiroEcologico-Desenvolvendo/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/home/allison/Documentos/8 SEM/Projet_Integrador/node_video/PantaneiroEcologico-Desenvolvendo/node_modules/express/lib/router/index.js:335:12)
at next (/home/allison/Documentos/8 SEM/Projet_Integrador/node_video/PantaneiroEcologico-Desenvolvendo/node_modules/express/lib/router/index.js:275:10)
at serveStatic (/home/allison/Documentos/8 SEM/Projet_Integrador/node_video/PantaneiroEcologico-Desenvolvendo/node_modules/serve-static/index.js:75:16)
at Layer.handle [as handle_request] (/home/allison/Documentos/8 SEM/Projet_Integrador/node_video/PantaneiroEcologico-Desenvolvendo/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/home/allison/Documentos/8 SEM/Projet_Integrador/node_video/PantaneiroEcologico-Desenvolvendo/node_modules/express/lib/router/index.js:317:13)
at /home/allison/Documentos/8 SEM/Projet_Integrador/node_video/PantaneiroEcologico-Desenvolvendo/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/home/allison/Documentos/8 SEM/Projet_Integrador/node_video/PantaneiroEcologico-Desenvolvendo/node_modules/express/lib/router/index.js:335:12)
at next (/home/allison/Documentos/8 SEM/Projet_Integrador/node_video/PantaneiroEcologico-Desenvolvendo/node_modules/express/lib/router/index.js:275:10)
at serveStatic (/home/allison/Documentos/8 SEM/Projet_Integrador/node_video/PantaneiroEcologico-Desenvolvendo/node_modules/serve-static/index.js:75:16)
at Layer.handle [as handle_request] (/home/allison/Documentos/8 SEM/Projet_Integrador/node_video/PantaneiroEcologico-Desenvolvendo/node_modules/express/lib/router/layer.js:95:5)..




e eu tenho o arquivo .handlebars que contem o meu formulario esse aqui..

{{#each erros}}



<div class="alert alert-danger">{{texto}}</div>

{{else}}
{{/each}}

<div class="card">

<div class="card-body">

<h4>Nova Noticia</h4>

<form action="/noticias/nova" method="POST" enctype="multipart/form-data">


<label for="titulo">Titulo</label>
<input type="text" name="titulo" class="form-control" required='true'>


<label for="descricao">Descrição</label>
<input type="text" name="descricao" class="form-control" required>

<label for="conteudo">Conteudo</label>
<textarea name="conteudo" class="form-control" required></textarea>


<div class="form-group mt-3">

<input type="file" name="imagem" class="form-control-file">
</div>

<div class="form-group mt-3">

<input type="file" name="video" class="form-control-file" multiple>
</div>




<button class="btn btn-success mt-4" type="submit">Criar Noticia</button>


</form>



</div>


</div>


eu acho q ele n ta conseguindo pegar o o nome do campo do formulario nao serio isso


4. Re: UPLOAD ARQUIVOS [RESOLVIDO]

Ruan
ru4n

(usa Debian)

Enviado em 18/11/2019 - 19:42h

eu acho q ele n ta conseguindo pegar o o nome do campo do formulario nao serio isso


Sim. Passei um exemplo geral, mas no seu caso ficaria mais ou menos assim (precisa testar):
app.post('/noticias/nova', (req, res) => {
// Pega input de imagem e video
const { imagem, video } = req.files;

// Define o caminho base de destino do arquivo
const filePath = 'public/upload';

// Verifica erro
let err = false;

// Copia a imagem
imagem.mv(path.resolve(__dirname, `${filePath}/noticias`, imagem.name), (ierror) => {
if(ierror) {
err = true;
return;
}

// Copia o vídeo
video.mv(path.resolve(__dirname, `${filePath}/video`, video.name), (verror) => {
if(verror) {
err = true;
return;
}

Noticias.create({
...req.body,
imagem: `/noticias/${imagem.name}`,
video: `/noticias/${video.name}`
}, (error, Noticias) => {
err = true;
});

});
});

// Em caso de erro, redireciona
if(err) {
res.redirect('/');
return;
}

// Finaliza a requisição
res.status(200).end();
});







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts