koa 使用记录

const Koa = require('koa')
const koaBody = require('koa-body')
const koaParser = require('koa-bodyparser')()
const static = require('koa-static')
const views = require('koa-views')
const multer = require('koa-multer')

const app = new Koa()

koa-body: 实现文件上传(form action=“...url” 提交表单式上传)

app.use(koaBody({
  multipart: true, //允许上传多个文件
  formidable: {
     maxFileSize: 200 * 1024 * 1024 // 设置上传文件大小最大限制,默认2M
  },
  keepExtensions: true //保留文件后缀
}))

koa-parser: koa-bodyparser中间件可以把koa2上下文的formData数据解析到ctx.request.body中

// 使用ctx.body解析中间件
app.use(koaParser)

koa-static: 引入固定路径下的资源(加载静态资源)

app.use(static(__dirname + '../src/'))

koa-views: 加载模版引擎(tips:如果加载的是html模版 就不需要最后一个参数辣)

app.use(views(path.join(__dirname, '../src'), {
  extension: 'ejs'
}))

multer: 实现文件上传(input file 文件流上传)

//文件上传
let storage = multer.diskStorage({
  destination: function(req, file, cb) {
    //这个project可以是你跟前端约定的任意参数名。。。
    let project = req.body.project
    // 存储josn文件到对应的静态资源
    const dir = path.join(__dirname, 'src/static/' + project)
    // 检查是否存在同名文件
    if (!fs.existsSync(dir)) {
      fs.mkdirSync(dir)
    }
    cb(null, dir)
  },
  //修改文件名称
  filename: function(req, file, cb) {
    let fileFormat = file.originalname.split('.') //以点分割成数组,数组的最后一项就是后缀名
    cb(
      null,
      file.originalname // 方法1: 展示上传json 的原始名称
      aaa + '.' + fileFormat[fileFormat.length - 1] // 方法2: 展示改名后的json名称
    )
  }
})
var upload = multer({ storage: storage })
router.post('/upload', upload.single('file'), async (ctx, next) => {
    ctx.body = {
      code: 200,
      success: true,
      msg: '上传成功',
      filename: ctx.req.file.filename //返回文件名
    }
})

你可能感兴趣的:(koa 使用记录)