1、初始化仓库

  1. yarn init -y

2、安装依赖

  1. yarn add koa koa-router koa-body

3、配置index.js

koa-body可以使我们看到前面页面向服务器传入的值
ctx.request.body
ctx.request.files

  1. const koa = require("koa")
  2. const router = require("koa-router")()
  3. const koaBody = require("koa-body")
  4. const app = new koa()
  5. router.post("/file",async ctx=>{
  6. console.log(ctx.request.files);
  7. ctx.body = '上传成功'
  8. })
  9. app.use(koaBody({
  10. multipart:true,
  11. formidable:{
  12. maxFileSize:200*1024*1024,//设置默认上传文件大小
  13. // 保留文件扩展名
  14. keepExtensions:true
  15. }
  16. }))
  17. app.use(router.routes())
  18. app.listen(5000,()=>{
  19. console.log('服务器打开了');
  20. })
  21. 这里use的顺序很重要,koaBody必须要在router前面,不然会拿不到数据
  1. <form action="http://localhost:5000/file" method="post" enctype="multipart/form-data">
  2. <input type="file" name="logo"><br>
  3. <input type="submit">
  4. </form>
  5. 这里的enctype属性很重要,不可以省略,不然也是会拿不到值
  6. Tips:表单上传文件 一定要加上enctype ="multipart/form-data"

4、需要将数据上传到服务器

  1. # path.basename() 可以获取前文件名和扩展名
  2. const path = require("path")
  3. var file = 'c:/data/log.jpg
  4. console.log(path.basename(file))//logo.jpg
  1. const koa = require("koa")
  2. const router = require("koa-router")()
  3. const koaBody = require("koa-body")
  4. const static = require("koa-static")
  5. const fs = require("fs")
  6. const path = require("path")
  7. const app = new koa()
  8. router.post("/file",async ctx=>{
  9. var file = ctx.request.files.logo.path
  10. var baseName = path.basename(file)
  11. console.log(baseName);
  12. // 1、创建一个可读流
  13. var reader = fs.createReadStream(file)
  14. // 2、设置上传图片的文件名
  15. var upFilePath = `./static/${baseName}`
  16. // 3、创建一个可写流
  17. var writer = fs.createWriteStream(upFilePath)
  18. // 4、可读流通过管道写入可写流
  19. reader.pipe(writer)
  20. ctx.body = '上传成功'
  21. })
  22. app.use(koaBody({
  23. multipart:true,
  24. formidable:{
  25. maxFileSize:200*1024*1024,//设置默认上传文件大小
  26. // 保留文件扩展名
  27. keepExtensions:true
  28. }
  29. }))
  30. app.use(static(path.join(__dirname,"static")))
  31. app.use(router.routes())
  32. app.listen(5000,()=>{
  33. console.log('服务器打开了');
  34. })