2017-05-25 9 views
1

私はファイルをアップロードしようとしています。アップロードはOKです!問題は、私がfileFitlerの処理に従って受け入れられないファイルをアップロードしようとするときです。私はコンソールで何らかのエラーを受けたり、ユーザーをバックページにリダイレクトしたいのですが、ブラウザでエラーが発生しました。Express - multer fileFilterエラー処理

しかし、私が受け入れている拡張機能をアップロードすると、OKになります!

はここに私のコードです:

const mongoose = require('mongoose'); 
const multer = require('multer'); 
const uuidV4 = require('uuid/v4'); 
const Video = require('../models/videoModel'); 


function fileFilter(req, file, cb){ 
    const extension = file.mimetype.split('/')[0]; 
    if(extension !== 'video'){ 
     return cb(null, false), new Error('Something went wrong'); 
    } 
    cb(null, true); 
}; 

var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
     cb(null, './uploads') 
    }, 


    filename: function (req, file, cb) { 
     const newName = uuidV4(); 
     const extension = file.mimetype.split('/')[1]; 
     cb(null, newName +`.${extension}`);  
    } 
}); 

var upload = multer({ storage: storage, fileFilter: fileFilter}); 
exports.uploadVideo = upload.single('file'); // the single param should be the name of the file input form 

exports.CreateVideo = (req, res) => { 
    const newVideo = {title: req.body.title, path: req.file.filename}; 
    Video.create(newVideo, function(err, result){ 
     if(err){ 
      console.log('Não foi possível realizar o upload do vídeo.' + err); 
     } 
     else{ 
      console.log('Vídeo upado com sucesso!'); 
      res.redirect('/'); 
      console.log(result); 
     } 
    }) 
}; 

exports.Home = (req, res) =>{ 
    res.render('index'); 
}; 

exports.ShowVideos = (req, res) =>{ 
    Video.find({}, function(err, result){ 
     if(err){ 
      res.redirect('/'); 
     } 
     else{ 
      res.render('video', {videoData:result}); 
     } 
    }) 
}; 
+0

あなたは 'uploadVideo'を呼び出すルートを置くことができますか? –

+0

route.post( '/ upload'、videoController.uploadVideo、videoController.CreateVideo); –

答えて

1

コンソールにエラーを取得する、あなたのfileFilterを変更し、cb機能にエラーを渡すことができます。参照:

function fileFilter(req, file, cb){ 
    const extension = file.mimetype.split('/')[0]; 
    if(extension !== 'video'){ 
     return cb(new Error('Something went wrong'), false); 
    } 
    cb(null, true); 
}; 

希望すると助かります!

関連する問題