如何在multer中检查文件类型
Posted
技术标签:
【中文标题】如何在multer中检查文件类型【英文标题】:how to check file type in multer 【发布时间】:2021-04-08 18:37:56 【问题描述】:我正在使用 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, file, cb)
cb(
null,
file.fieldname +
"-" +
Date.now() +
"." +
file.originalname.split(".")[1]
);
,
fileFilter: function (req, file, 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 ;
我不知道为什么会发生这种情况,如果有人遇到过这种情况,我将不胜感激。
【问题讨论】:
【参考方案1】:首先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, file, 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, file, cb)
checkFileType(file, cb);
,
).single("imageUrl");
module.exports = multerUploads, dataUri ;
【讨论】:
以上是关于如何在multer中检查文件类型的主要内容,如果未能解决你的问题,请参考以下文章
如果未使用 multer 在 nodejs 中选择文件,则不更新
Multer 为使用 ReactJS 上传的文件返回 `undefined`