验证仅使用multer

时间:2016-12-06 09:22:43

标签: node.js express multer

我正在使用multer上传nodejs中的文件。以下是我的代码。

var multer = require('multer');
var imagefolder = __base + 'public/complaintimages';

var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        if (common.ImageMimeTypes.indexOf(file.mimetype) < 0) {
            common.ActionOutput.Status = common.ActionStatus.Error;
            common.ActionOutput.Message = 'Invalid image file: ' + file.originalname;
            cb(new Error(JSON.stringify(common.ActionOutput)), null);
        } else
            cb(null, imagefolder);
    },
    filename: function (req, file, cb) {
        var filenm = randomstring.generate(10);
        console.log(filenm + file.originalname);
        cb(null, filenm + file.originalname);
    },
    onError: function (err, next) {
        console.log('error', err);
        next(err);
    }
})

var upload = multer({ storage: storage });

我只允许jpg文件上传,方法是将mime类型检查工作正常。 但是当我上传任何其他类型的文件时,控件不会进入onError块,以便我可以向用户返回正确的验证消息,如“please upload valid jpg files.” 请指教。

1 个答案:

答案 0 :(得分:0)

上传验证的另一种方法是使用fileFilter回调https://github.com/expressjs/multer#filefilter

确定文件的实际类型实际上非常复杂,因此使用(检测Buffer / Uint8Array的文件类型)https://github.com/sindresorhus/file-type而不是使用mime类型。这是一种更好的方法,然后根据mime类型决定,但不保证它已被伪造。