我正在使用expressjs 4.0和multer来处理文件上传。
问题是,我想在文件大小超过maxSize变量时停止文件上传。但 multer无论如何都会上传文件。
有没有办法阻止这种行为。
一些示例代码:
app.post('/upload', function(req, res) {
var maxSize = 32 * 1000 * 1000 // 32mb max
if(req.files.file.length > maxSize) {
// stop upload
} else {
// continue
res.send(201);
}
});
答案 0 :(得分:2)
尝试multer限制 -
app.use('/userimage', multer({
limits: { fileSize: 1* 1024 * 1024}, //1mb
onFileUploadStart: function (file, req, res) {
console.log(file.fieldname + ' fileupload is starting ...');
}}));
答案 1 :(得分:1)
根据Multer文档:(https://www.npmjs.org/package/multer)你可以使用onFileUploadStart(file),如果大小超过你的限制,则返回false。
例如:
var express = require('express');
var multer = require('multer');
var maxSize = 32 * 1000 * 1000;
var app = express();
app.use(multer({
dest: './uploads/',
onFileUploadStart: function(file, req, res){
if(req.files.file.length > maxSize) {
return false;
}
})
}));
答案 2 :(得分:1)
这就是我在项目中处理这个问题的方法。这似乎是目前最好的解决方案。
api.js
var multer = require('./config/multer')();
var utils = require('./utils');
module.exports = function(app, dao) {
app.post('/docs/:system', multer, function(req, res) {
var file = req.files.documento;
if (file.truncated) {
utils.removeFile(file.path); // remove the truncated file
return res.status(413).end(); // 413 ("Request Entity Too Large")
}
...
res.status(200).send({_id : document._id});
}); ...
配置/ multer.js
var multer = require('multer');
var config = require('./config')();
module.exports = function() {
return multer({ dest: config.BASE_UPLOAD_FOLDER, limits: {fileSize: config.MAX_FILE_SIZE_FOR_UPLOAD},
...
onFileSizeLimit: function (file) {
console.log('> The file size exceeds the maximum size allowed (' + config.MAX_FILE_SIZE_FOR_UPLOAD/(1024*1024) + 'MB)');
},
onFileUploadComplete: function(file) {
console.log('> File \'' + file.fieldname + '\' stored in \'' + file.path + '\'' + (file.truncated ? ' (TRUNCATED).' : '.') );
}
});
};
utils.js
var fs = require('fs');
var removeFile = function (filePath) {
try {
fs.unlink(filePath);
console.log('File"' + filePath + '" removed!');
} catch (err) {
...
}
};
...
exports.removeFile = removeFile;
答案 3 :(得分:0)
在multer“ multer”中:“ ^ 1.4.2”,请使用fileFilter opts取消上传
var uploadImage = multer({
storage: storage,
fileFilter: function (req, file, cb) {
let list = ['png', 'jpg', 'jpeg']
if (list.indexOf(file.mimetype.split('/')[1]) < 0) {
console.log("false")
return cb(null, false)
}
cb(null, true)
}
});
答案 4 :(得分:-1)
我认为执行此文件大小检查的最佳位置是前端而不是后端。当用户选择要上传的文件时,我们可以立即获取文件大小,并在大小超过允许限制时提醒用户。
我是这样做的:
$('#upload input').change(function(click) {
var file = this.files[0];
if (file.size > MAX_FILE_SIZE_MB * 1024 * 1024) {
alert('Sorry, selected file exceeds allowed size limit (' + MAX_FILE_SIZE_MB + 'MB).');
return false;
}
// Post file upload request via AJAX
// ...
}