1、初始化仓库
yarn init -y
2、安装依赖
yarn add koa koa-router koa-body
3、配置index.js
koa-body可以使我们看到前面页面向服务器传入的值
ctx.request.body
ctx.request.files
const koa = require("koa")
const router = require("koa-router")()
const koaBody = require("koa-body")
const app = new koa()
router.post("/file",async ctx=>{
console.log(ctx.request.files);
ctx.body = '上传成功'
})
app.use(koaBody({
multipart:true,
formidable:{
maxFileSize:200*1024*1024,//设置默认上传文件大小
// 保留文件扩展名
keepExtensions:true
}
}))
app.use(router.routes())
app.listen(5000,()=>{
console.log('服务器打开了');
})
这里use的顺序很重要,koaBody必须要在router前面,不然会拿不到数据
<form action="http://localhost:5000/file" method="post" enctype="multipart/form-data">
<input type="file" name="logo"><br>
<input type="submit">
</form>
这里的enctype属性很重要,不可以省略,不然也是会拿不到值
Tips:表单上传文件 一定要加上enctype ="multipart/form-data"
4、需要将数据上传到服务器
# path.basename() 可以获取前文件名和扩展名
const path = require("path")
var file = 'c:/data/log.jpg
console.log(path.basename(file))//logo.jpg
const koa = require("koa")
const router = require("koa-router")()
const koaBody = require("koa-body")
const static = require("koa-static")
const fs = require("fs")
const path = require("path")
const app = new koa()
router.post("/file",async ctx=>{
var file = ctx.request.files.logo.path
var baseName = path.basename(file)
console.log(baseName);
// 1、创建一个可读流
var reader = fs.createReadStream(file)
// 2、设置上传图片的文件名
var upFilePath = `./static/${baseName}`
// 3、创建一个可写流
var writer = fs.createWriteStream(upFilePath)
// 4、可读流通过管道写入可写流
reader.pipe(writer)
ctx.body = '上传成功'
})
app.use(koaBody({
multipart:true,
formidable:{
maxFileSize:200*1024*1024,//设置默认上传文件大小
// 保留文件扩展名
keepExtensions:true
}
}))
app.use(static(path.join(__dirname,"static")))
app.use(router.routes())
app.listen(5000,()=>{
console.log('服务器打开了');
})