前言
由于项目中需要一个文件上传和下载的功能,就去找了很多资料,github上multer也是star数十分的高,于是就研究了一下,写了个demo记录下来以便日后使用。对于multer感兴趣的同学可自行github,其中中文文档官方说是有可能更新不及时,还是看英文文档来得靠谱,另外youtube上也有许多可供学习的视频,自行寻找。
正文
根据自己使用下来的经验multer提供了一下几个重要和常用的功能:
- 完成文件上传路径设定
- 完成上传后的文件名的命名
- 使用过程中可自定义可上传的文件类型
- 限制上传文件的大小
基本上我在使用中需要用到的功能就是以上四点了,接下来讲讲到底如何使用multer。
使用有一下几个步骤:
- 获取multer引用
- 配置multer,包括对存储位置的配置和文件名称的配置
- 作为中间件在路由中使用
代码如下:
const multer = require('multer') // 获取引用
// 设置上传组件的参数
const storage = multer.diskStorage({
destination: config.uploadPath, // 上传的文件位置(自定义)
filename: function (req, file, cb) {
cb(null, file.originalname + '-' + Date.now() + path.extname(file.originalname)) // 保存的名字(这里只是简单的加上时间戳)
}
})
// 将配置应用到multer上
// .array('file')表示可以接受前端同时上传多个文件,而其中的'file'表示前端form中上传的input的name
const upload = multer({
storage: storage
}).array('file')
// 作为中间件使用
app.use('/api/upload', (req, res, next) => {
upload(req, res, (err) => {
if (err) {
return next(err)
}
else {
next()
}
})
}, (req, res, next) => {
console.log(req.files)
res.send('success')
})
使用方法如代码所示,并没有如文档中说的在全局配置中间件的原因纯粹是因为没必要,只有这个路由需要上传就只在这个路由使用中间件就好了。
其中又遇到一个点,我是使用element-ui中的上传组件,并不知道name是什么,不过也好解决,看看请求头附带的信息知道了name应该是file所以就.arry('file'),明天再看看是否可以自己设置name属性。