2016-01-09 94 views
6

我做一個簡單的文件上傳系統multer:如何限制用分割器上傳時的文件大小?

var maxSize = 1 * 1000 * 1000; 

var storage = multer.diskStorage({ 
    destination: function (req, file, callback) { 
    callback(null, 'public/upload'); 
    }, 
    filename: function (req, file, callback) { 
    callback(null, file.originalname); 
    }, 
    onFileUploadStart: function(file, req, res){ 
    if(req.files.file.length > maxSize) { 
     return false; 
    } 
    } 

}); 

var upload = multer({ storage : storage}).single('bestand'); 

router.post('/upload',function(req,res){ 
    upload(req,res,function(err) { 
     if(err) { 
      return res.end("Error uploading file."); 
     } 
     console.log(req.file); 
     res.redirect(req.baseUrl); 
    }); 
}); 

這一切工作正常,文件被上傳。唯一不起作用的是最大尺寸的限制。我做到這一點,以便onfileupload開始文件的大小得到檢查,如果它大到它將返回false。但該文件仍然只是上傳。

看來onFileUploadStart根本沒有做任何事情。我嘗試了console.log的東西,但沒有。

我在做什麼錯?如何在使用多媒體上傳時限制文件大小?

+0

'甚至在'onFileUploadStart'的處理程序中? – nbro

+0

我正在關注的教程。但我認爲你說這不是阻止上傳的正確方法? –

+0

你可以'console.log'(if語句之前)該文件在同一處理程序中嗎?你看到了什麼? – nbro

回答

20

沒有onFileUploadStart與新的multer API。如果你想限制文件大小,則應該增加limits: { fileSize: maxSize }傳遞給multer()對象:你在哪裏看到了,您需要返回`FALSE`如果`req.files.file.length> MAXSIZE

var upload = multer({ 
    storage: storage, 
    limits: { fileSize: maxSize } 
}).single('bestand'); 
+0

謝謝,確實有效。是否可以傳遞錯誤?像文件大小太大? –

+5

您應該可以添加Express錯誤處理程序並檢查錯誤代碼==='LIMIT_FILE_SIZE''。 – mscdex

+0

@mscdex你可以請給出一個相同的例子 –

相關問題