如何解决如何在multer中检查文件类型
我正在用 React 做一个项目,但遇到了一个让我难住的问题。
我想在 cloudinary 上上传我的文件,还想检查我的文件类型和 MIME 类型,但遇到此错误,这是我的代码
所以这是我的代码,我无法过滤掉文件类型。
如果有人有一些解决方案,如果你能帮助我,那就太好了
const multer = require("multer");
const DatauriParser = require("datauri/parser");
const path = require("path");
const fs = require("fs");
const dontenv = require("dotenv");
dontenv.config({ path: "config.env" });
let storage;
let dataUri;
const parser = new DatauriParser();
if (process.env.STORAGE_TYPE == "cloud") {
storage = multer.memoryStorage();
dataUri = (req) =>
parser.format(
path.extname(req.file.originalname).toString(),req.file.buffer
);
} else {
dataUri = {};
storage = multer.diskStorage({
destination: function (req,file,cb) {
var directory = process.env.STORAGE;
if (!fs.existsSync(directory)) {
fs.mkdirSync(directory);
}
cb(null,directory);
},filename: function (req,cb) {
cb(
null,file.fieldname +
"-" +
Date.now() +
"." +
file.originalname.split(".")[1]
);
},fileFilter: function (req,cb) {
checkFileType(file,cb);
},});
function checkFileType(file,cb) {
// Allowed ext
const filetypes = /jpeg|jpg|png|gif/;
// Check ext
const extname = filetypes.test(
path.extname(req.file.originalname).toString()
);
// Check mime
const mimetype = filetypes.test(file.mimetype);
if (mimetype && extname) {
return cb(null,true);
} else {
cb("Error: Images Only!");
}
}
// to Check File TYpe
}
const multerUploads = multer({ storage: storage }).single("imageUrl");
module.exports = { multerUploads,dataUri };
我不知道为什么会发生这种情况,如果有人经历过,我将不胜感激。
解决方法
首先,fileFilter
不是 diskStorage
的键,它是 multer 本身的键。此外,您已经在 else
中声明了函数。所以使用multer检查文件类型应该是这样的:
const multer = require("multer");
const DatauriParser = require("datauri/parser");
const path = require("path");
const fs = require("fs");
const dontenv = require("dotenv");
dontenv.config({ path: "config.env" });
let storage;
let dataUri;
const parser = new DatauriParser();
if (process.env.STORAGE_TYPE == "cloud") {
storage = multer.memoryStorage();
dataUri = (req) =>
parser.format(
path.extname(req.file.originalname).toString(),req.file.buffer
);
} else {
dataUri = {};
storage = multer.diskStorage({
destination: function (req,file,cb) {
var directory = process.env.STORAGE;
if (!fs.existsSync(directory)) {
fs.mkdirSync(directory);
}
cb(null,directory);
},filename: function (req,cb) {
cb(
null,file.fieldname +
"-" +
Date.now() +
"." +
file.originalname.split(".")[1]
);
}
});
// to Check File TYpe
}
function checkFileType(file,cb) {
// Allowed ext
const filetypes = /jpeg|jpg|png|gif/;
// Check ext
const extname = filetypes.test(
path.extname(file.originalname).toString()
);
// Check mime
const mimetype = filetypes.test(file.mimetype);
if (mimetype && extname) {
return cb(null,true);
} else {
cb("Error: Images Only!");
}
}
const multerUploads = multer({
storage: storage,fileFilter: function (req,cb) {
checkFileType(file,cb);
},}).single("imageUrl");
module.exports = { multerUploads,dataUri };
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。