08-博客api接口项目实战之文件上传

辰漪
2022-01-20 / 0 评论 / 33 阅读 / 正在检测是否收录...

实现上传文件功能

需要字段 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
  • 请求参数:
请求参数参数类型参数说明备注
avatarfile文件对象信息必填
0
选择打赏方式:
微信

评论 (0)

取消