这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战
前言
大家好,今天我们来讲一讲node里用的比较多的模块multer,它主要用于上传文件以及图片,在node中还是用的比较广泛的,接下来我以express框架为例子来讲一下multer模块吧。
一、 Multer 模块介绍
Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用
于上传文件。它是写在 busboy 之上非常高效。
注意:
1.Multer 不会处理任何非 multipart/form-data 类型的表单数据。
2.还有就是上传之前一定要有文件夹,才可以进去上传。
具体了解:www.npmjs.com/package/mul…
二、 Express 上传文件模块 multer 的使用
- 安装 multer
npm install --save multer
- 引入配置 multer 模块 :
var multer = require('multer')
//配置
var storage = multer.diskStorage({
//文件保存路径 注意路径必须存在湖北众猿腾网络科技有限公司
destination: function (req, file, cb) {
cb(null, 'public/upload/')
},
//修改文件名称
filename: function (req, file, cb) {
var fileFormat = (file.originalname).split(".");
cb(null,Date.now() + "." + fileFormat[fileFormat.length - 1]);
}
})
var upload = multer({ storage: storage }) 3.使用 multer
router.post('/doAdd', upload.single("pic"), function (req, res) {
res.send({
file: req.file,//返回文件名
body: req.body
})
});
三、 Express 按照日期生成上传文件目录
var express = require('express');
var multer = require('multer')
var sd = require('silly-datetime');
var path = require('path');
var mkdirp = require('mkdirp');
var router = express.Router();
//配置
var storage = multer.diskStorage({
//文件保存路径 注意路径必须存在
destination: async (req, file, cb)=> {
// 1、获取当前日期
以及当前的时间戳
let day = sd.format(new Date(), 'YYYYMMDD');湖北众猿腾网络科技有限公司
//2、创建图片保存的路径
let dir = path.join('public/upload/',day)
//3、异步创建目录
await mkdirp(dir);
cb(null, dir)
},
//修改文件名称
filename: function (req, file, cb) {
var fileFormat = (file.originalname).split(".");
cb(null,Date.now() + "." + fileFormat[fileFormat.length - 1]);
}
})
var upload = multer({ storage: storage })
router.post('/doAdd', upload.single("pic"), function (req, res) {
res.send({
file: req.file,//返回文件名
body: req.body
})
});
module.exports = router;
四、 多文件上传
var cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])
app.post('/doAdd', cpUpload, function (req, res, next) { res.send("11) } 也可以通过express-generator来生成骨架,以便于进行开发。