2016-07-29 21 views
1

質問タイトルで説明するように、ファイル拡張子に基づいてアップロードされたファイルをフィルタリングする必要があります。だから、私は公式ドキュメントを見て、このウェブサイトを検索しました。私は私が出会ったソリューションを試してみたExpressでのMulterを使用したファイル拡張子のフィルタリング

を試してみた何

。ファイルは正常にアップロードされていますが、問題はファイルをフィルタリングする方法です。現在、私のRouter.jsファイルは次のようになっています。私はそれがその関数に入るかしないかどうかを確認するためにonFileUploadStartで何かをしようとしたエコー

Router.JS

var multer = require('multer'); 
var storage = multer.diskStorage({ //multers disk storage settings 
    destination: function (req, file, cb) { 
     cb(null, './public/uploads/') 
    }, 
    limits:{ 
     files: 1, 
     fileSize: 1024 * 1024 
    }, 
    filename: function (req, file, cb) { 
     var datetimestamp = Date.now(); 
     cb(null, file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length -1]) 
    }, 
    onFileUploadStart: function(file) { 
     console.log("Inside uploads"); 
     if (file.mimetype == 'image/jpg' || file.mimetype == 'image/jpeg' || file.mimetype == 'image/png') { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
}); 
var upload = multer({ //multer settings 
    storage: storage 
}).single('profilepic'); 


router.post('/profile', function(req, res){ 
    upload(req,res,function(err){ 
     if(err) 
     { 
      console.log(err); 
     } 
     else 
     { 
      console.log("Image was uploaded"); 
     } 
    }); 
}); 

。そしてそれはそうではありませんでした。 onFileUploadStart以外にも、私はこのlinkで述べたようにfileFilterを試しましたが、役に立たなかったです。どのようにこれを解決するための提案?前もって感謝します。

答えて

4

multerを使用した例:

var storage = multer.diskStorage({ //multers disk storage settings 
    destination: function (req, file, cb) { 
     cb(null, './public/uploads/') 
    }, 
    filename: function (req, file, cb) { 
     var datetimestamp = Date.now(); 
     cb(null, file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length -1]) 
    } 
}); 

var upload = multer({ //multer settings 
    storage: storage, 
    fileFilter: function (req, file, callback) { 
     var ext = path.extname(file.originalname); 
     if(ext !== '.png' && ext !== '.jpg' && ext !== '.gif' && ext !== '.jpeg') { 
      return callback(new Error('Only images are allowed')) 
     } 
     callback(null, true) 
    }, 
    limits:{ 
     fileSize: 1024 * 1024 
    } 
}).single('profilepic'); 

Node.js - File uploadより抜粋。元の著者はIcemanMikhailでした。アトリビューションの詳細はcontributor pageにあります。ソースはCC BY-SA 3.0でライセンスされており、Documentation archiveにあります。参照トピックID:4080および例ID:14210。

-1

あなたがWeb開発に使用されている場合は、バックエンドに渡されていない、フロントエンドで検証され、あなたが試すことができますすることができます。

var file = files[0]; 
var imageType = /image.*/; 

if (!file.type.match(imageType)) { 
    // do something 
} 
関連する問題