1、导入multer包
npm install multer --save -d
2、引用multer
var multer = require("multer");
3、处理上传文件
/**
* 判断目录是否存在
* @param {路径} path
* @returns
*/
var isDirectory = function (path) {
try {
return fs.existsSync(path);
} catch (e) {
return false;
}
};
/**
* 文件上传过滤(图片过滤)
* @param {*} req
* @param {*} file
* @param {*} cb
*/
var imageFilter = function (req, file, cb) {
var acceptableMime = ["image/jpeg", "image/png", "image/jpg", "image/gif"];
if (acceptableMime.indexOf(file.mimetype) !== -1) {
cb(null, true);
} else {
cb(null, false);
}
};
var storage = multer.diskStorage({
destination: function (req, file, cb) {
var t = new Date();
// 接收到文件后输出的保存路径(若不存在则需要创建)
var directory = ;
// 检查某个目录是否存在
var dir = path.join(__dirname, "public", "uploads", t.getFullYear() + "-" + (t.getMonth() + 1));
if (!isDirectory(dir)) {
// 不存在目录,则异步创建目录
fs.mkdir(dir, (err) => {
if (err) return err;
console.log("目录创建成功");
});
}
cb(null, directory);
},
filename: function (req, file, cb) {
// cb(null, file.originalname);
cb(null, uuid.v1());
},
});
var limits= {
fields: 16, //非文件字段的数量
fileSize: 50 * 1024 * 1024, //文件大小 50M
files: 3, //上传文件数量
};
//方法一:
var upload = multer({
storage: storage,
// fileFilter: imageFilter,
limits: limits,
}).single("avatar");
//方法二:
var upload = multer({
storage: storage,
// fileFilter: imageFilter,
limits: limits,
});
//适用于多文件上传
var type = upload.array("avatar", 12);
//适用于混合模式文件上传
// var type = upload.fields([
// { name: "avatar", maxCount: 1 },
// { name: "photo", maxCount: 8 },
// ]);
//适用于单文件上传
// var type = upload.single("avatar");
4、使用
//方法一:
//文件上传接口
router.post("/api/file/upload", async (req, res) => {
upload(req, res, function (err) {
if (err) {
return res.send({error: err});
} else {
console.log(req.file);
return res.send({ data: req.file });
}
});
});
//方法二:
router.post("/api/file/upload", type, async (req, res) => {
console.log(req.files);
return res.send({ data: req.files });
});