场景:用户在注册时可以上传头像
1、下载插件
npm i formidable@2.1.2
2、封装上传函数
const formidable = require('formidable')
const path = require('path')
const form = formidable({
multiples: true,
// 设置上传文件的保存目录
// uploadDir: path.resolve(__dirname + '/../public/images'),
// 保持文件后缀
keepExtensions: true,
})
async function uploadFile(folderName, req, res, next) {
form.uploadDir = path.resolve(__dirname + `/../public/${folderName}`)
return new Promise((resolve, reject) => {
form.parse(req, (err, fields, files) => {
if (err) {
reject(next())
} else {
resolve(files)
}
})
})
}
exports.uploadFile = uploadFile
3、编写上传接口
router.post('/uploadAvatar', async (req, res, next) => {
try {
const obj = await uploadFile('images', req, res, next)
if (!obj) throw ''
const { newFilename, originalFilename } = obj.file
const imgUrl = `${PROTOCOL}://${HOSTNAME}:${PORT}/images/${newFilename}`
imgModel.create({ imgName: originalFilename, newImgName: newFilename, imgUrl }).then(data => {
res.json({
code: 1,
msg: '上传头像成功',
data: {
imgId: data._id,
imgUrl: imgUrl,
},
})
})
} catch (error) {
res.status(500).json({ code: -1, msg: '头像上传失败' })
}
})