2015-10-17 18 views
1

在文件上傳期間,我想驗證文件大小,確保上傳的文件是實際圖像,並且最後但並非最不重要的是驗證標題已寫入圖片。但是這個代碼不起作用。我該怎麼辦?在node.js中添加邏輯/驗證功能(express)

var multer = require('multer'), 
    upload = multer({ 
      dest: 'uploads/', 
      onFileUploadStart: function(file, req, res){ 
       if(file.size > 1000000) { 
        res.send("Maximum picture size is 1 MB"); 
        return false; 
       } 
       if(req.body.postname === ''){ 
        res.send("Enter a title name for your post"); 
        return false; 
       } 
       if(file.mimetype !== 'image/png' && file.mimetype !== 'image/jpg' && file.mimetype !== 'image/jpeg'){ 
        res.send("Supported image files are jpeg, jpg, and png"); 
        return false; 
       } 
      } 
     }); 

而這是通過表單獲取請求的路由。

router.post('/uploadpost', upload.single('image'), function(req, res){ 
fs.rename(req.file.path, req.file.destination + req.file.originalname, function(err){ 
if(err){ 
    throw err; 
} 
}); 

var postObj = { 
    Title : req.body.postname, 
    Img_path : req.file.destination + req.file.originalname 
} 


var query = connection.query('INSERT INTO posts SET ?', postObj, function(err, result){ 
    if(err){ 
     throw err; 
    } 
}); 

回答

1

multer中間件一直有一個很模糊的API文檔,但一些挖後,我發現,它使用busboybehind the scenes,它管道limits選擇對象Busboy

因此總而言之,沒有onFileUploadStart選項,但是您可以定義的選項對象中有一個limits屬性。現在,如果我理解正確的一切,你可以做這樣的:

var multer = require('multer'); 
    upload = multer({ 
     dest: 'upload/', 
     limits: { 
     fileSize: 1000000 
     } 
    }); 

如果你需要的limits對象更多的配置選項,對Busboy's GitHub Repo

希望這有助於現有的文件!