2016-01-09 59 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你可以请给出一个相同的例子 –

相关问题