前言
由于項目中需要一個文件上傳和下載的功能券册,就去找了很多資料盒粮,github上multer也是star數(shù)十分的高疟丙,于是就研究了一下,寫了個demo記錄下來以便日后使用重窟。對于multer感興趣的同學可自行github载萌,其中中文文檔官方說是有可能更新不及時,還是看英文文檔來得靠譜巡扇,另外youtube上也有許多可供學習的視頻扭仁,自行尋找。
正文
根據(jù)自己使用下來的經(jīng)驗multer提供了一下幾個重要和常用的功能:
- 完成文件上傳路徑設定
- 完成上傳后的文件名的命名
- 使用過程中可自定義可上傳的文件類型
- 限制上傳文件的大小
基本上我在使用中需要用到的功能就是以上四點了厅翔,接下來講講到底如何使用multer乖坠。
使用有一下幾個步驟:
- 獲取multer引用
- 配置multer,包括對存儲位置的配置和文件名稱的配置
- 作為中間件在路由中使用
代碼如下:
const multer = require('multer') // 獲取引用
// 設置上傳組件的參數(shù)
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屬性花墩。