除非文件是图像,否则如何防止使用 Multer 上传文件?
How to prevent files from being uploaded with Multer unless they are images?
如标题所说。
我到处找,找不到答案。
代码:
var upload = multer({dest:"./public/images/uploads/", limits: {fileSize: 250000}}).single("image");
问题
如果我选择这样做,这不会阻止我上传 pdf。
文档说明您应该使用 fileFilter 来跳过文件上传。
文件过滤器 (https://github.com/expressjs/multer#filefilter)
Set this to a function to control which files should be uploaded and which should be skipped. The function should look like this:
function fileFilter (req, file, cb) {
// The function should call `cb` with a boolean
// to indicate if the file should be accepted
// To reject this file pass `false`, like so:
cb(null, false)
// To accept the file pass `true`, like so:
cb(null, true)
// You can always pass an error if something goes wrong:
cb(new Error('I don\'t have a clue!'))
}
根据文档,我假设传入的 file
有一个 属性 mimetype
(https://github.com/expressjs/multer#api)。如果您想跳过,这可能是一个很好的决定提示。
编辑:
这个 GH 问题 (https://github.com/expressjs/multer/issues/114#issuecomment-231591339) 包含一个很好的用法示例。重要的是不仅要查看文件扩展名,因为它很容易重命名,而且还要考虑 mime 类型。
const path = require('path');
multer({
fileFilter: function (req, file, cb) {
var filetypes = /jpeg|jpg/;
var mimetype = filetypes.test(file.mimetype);
var extname = filetypes.test(path.extname(file.originalname).toLowerCase());
if (mimetype && extname) {
return cb(null, true);
}
cb("Error: File upload only supports the following filetypes - " + filetypes);
}
});
HTH
如标题所说。
我到处找,找不到答案。
代码:
var upload = multer({dest:"./public/images/uploads/", limits: {fileSize: 250000}}).single("image");
问题
如果我选择这样做,这不会阻止我上传 pdf。
文档说明您应该使用 fileFilter 来跳过文件上传。
文件过滤器 (https://github.com/expressjs/multer#filefilter)
Set this to a function to control which files should be uploaded and which should be skipped. The function should look like this:
function fileFilter (req, file, cb) {
// The function should call `cb` with a boolean
// to indicate if the file should be accepted
// To reject this file pass `false`, like so:
cb(null, false)
// To accept the file pass `true`, like so:
cb(null, true)
// You can always pass an error if something goes wrong:
cb(new Error('I don\'t have a clue!'))
}
根据文档,我假设传入的 file
有一个 属性 mimetype
(https://github.com/expressjs/multer#api)。如果您想跳过,这可能是一个很好的决定提示。
编辑: 这个 GH 问题 (https://github.com/expressjs/multer/issues/114#issuecomment-231591339) 包含一个很好的用法示例。重要的是不仅要查看文件扩展名,因为它很容易重命名,而且还要考虑 mime 类型。
const path = require('path');
multer({
fileFilter: function (req, file, cb) {
var filetypes = /jpeg|jpg/;
var mimetype = filetypes.test(file.mimetype);
var extname = filetypes.test(path.extname(file.originalname).toLowerCase());
if (mimetype && extname) {
return cb(null, true);
}
cb("Error: File upload only supports the following filetypes - " + filetypes);
}
});
HTH