【发布时间】:2016-04-14 08:14:28
【问题描述】:
我正在用 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 start 检查文件的大小,如果它太大,它将返回 false。但是文件仍然刚刚上传。
似乎onFileUploadStart 根本没有做任何事情。我试着console.log 里面的东西,但什么都没有。
我做错了什么?使用 multer 上传时如何限制文件大小?
【问题讨论】:
-
你在哪里看到需要在偶数
onFileUploadStart的处理程序中返回falseifreq.files.file.length > maxSize? -
我正在关注的教程。但我假设你说这不是停止上传的正确方法?
-
你能
console.log(在 if 语句之前)在同一个处理程序中的文件吗?你看到了什么? -
显然也许你应该使用
fileFilter而不是处理偶数onFileUploadStart(显然文件大小尚不清楚或为0......)顺便说一句......检查这里关于您应该如何限制文件大小:github.com/expressjs/multer/issues/186 如果您解决了问题,我鼓励您回答自己的问题;) -
这里还有另一个限制文件大小的示例(除其他外):github.com/expressjs/multer/issues/120:您基本上需要将文件大小指定为您作为属性传递的
limits对象您传递给multer的对象,即类似var upload = multer({ storage : storage, limits: {fileSize: maxSize } }).single('bestand');...