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 //返回文件名
}
})
网友评论