实现上传文件功能
需要字段 avatar 为文件信息对象
限定,只能上传 jpg jpeg png gif 格式的图片
有必要的话可以设置下文件上传的文件大小
需要用到的npm包:multer 用来上传文件
multer官网文档:https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md
实现步骤
1. 安装multer包
npm install multer
2. 创建路由
在router下新建upload.js文件
const { Router } = require('express')
const router = Router()
const dateFormat = require('../utils/dateFormat')
const uploadHandler = require('../router_handler/upload')
const multer = require('multer') // 上传文件所需要的包
// 设置文件存储的格式,以及位置
const storage = multer.diskStorage({
destination: function (req, file, cb) { // 设置文件存储的位置
cb(null, './uploads')
},
filename: function (req, file, cb) { // 设置文件名的格式
// 获取文件后缀名
const prefix = file.originalname.split('.')[file.originalname.split('.').length - 1]
cb(null, file.fieldname + '-' + dateFormat(new Date(), 'yyyy-MM-dd hh-mm-ss') + '.' + prefix)
}
})
// 设置文件过滤器 用来过滤不符合条件的文件
const fileFilter = (req, file, cb) => {
// 设置文件格式
const type = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif']
if (type.includes(file.mimetype)) return cb(null, true)
cb(new Error('上传失败,不支持的文件格式'+file.mimetype), false)
}
const upload = multer({
storage,
fileFilter,
})
// 上传文件
router.post('/uploads', upload.single('avatar'), uploadHandler)
module.exports = router
3. 创建路由处理函数
在router_handler下创建upload.js
// 上传文件
const uploadHandler = (req, res) => {
if (!req.file) return res.cc('field:avatar is file and required!')
const fileInfo = req.file
fileInfo.path = `/uploads/${fileInfo.filename}`
res.send({
status: 0,
fileInfo,
msg: '上传成功!'
})
}
module.exports = uploadHandler
4. 测试接口: http://127.0.0.1:8086/my/uploads
- 请求路径:/my/uploads
- 请求方法:post
- 请求头:Authorization: 登录token
- 请求参数:
请求参数 | 参数类型 | 参数说明 | 备注 |
---|---|---|---|
avatar | file | 文件对象信息 | 必填 |
评论 (0)