总结一下总是用到的图片上传功能,其它文件同理
具体实现
- 入口文件配置koa-body来支持文件上传
const path = require('path')
const Koa = require('koa')
const app = new Koa()
// KoaBody本身为函数
app.use(KoaBody({
multipart: true,//开启文件上传
// 文件上传的详细信息
//KoaBody依赖formidable包来处理上传的文件
formidable: {
// 配置选项option不推荐使用相对路径
// 在option的相对路径,是相对process.cwd()路径,不是当前路径
uploadDir: path.join(__dirname,'../upload'),//照片存放的文件夹
keepExtensions: true,
},
parsedMethods:['POST','PUT','PATCH','DELETE']
}))
// koa-static的配置
app.use(KoaStatic(path.join(__dirname, '../upload/goods')))
app.use(parameter(app))
- 接口返回文件名给调用者(前端)
KoaBody将上传后的文件信息挂载到
ctx.request.files
,我们返回的是ctx.request.files.key
(为formdata里面的key)
const {
file
} = ctx.request.files
const fileType = ['image/jpeg', 'image/png']
if (file) {
if (!fileType.includes(file.type)) {
return ctx.app.emit('error', unSupportedFileType, ctx)
}
ctx.body = {
code: 0,
message: '商品上传成功',
result: {
goods_img: path.basename(file.path)
}
}
} }
- 安装插件
koa-static
,作用是使某个目录设置成一个静态资源文件夹,当我们去请求文件的时候就会去对应的资源文件夹找 - 在入口文件配置静态资源路径
const KoaStatic = require('koa-static')
app.use(KoaStatic(path.join(__dirname, '../upload')))