1-1 初始化仓库

yarn init -y

1-2 安装依赖

yarn add koa koa-router koa-body

1-3 配置index.js

ctx.requst.files 读取上传的文件

  1. const koa = require("koa");
  2. const app = new koa();
  3. const router = require("koa-router")();
  4. const koaBody = require("koa-body");
  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);
  1. @ html/file.html
  2. <form action="http://localhost:5000/file"
  3. enctype="multipart/form-data"
  4. method="post">
  5. <input type="file" name="logo"> <br>
  6. <input type="submit">
  7. </form>

Tips:表单上传文件 一定要加上enctype =”multipart/form-data”

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

  1. # path.basename() 可以获取路径中图片的名字及其拓展名
  2. const path = require("path");
  3. var file ="c:/data/logo.jpg";
  4. console.log(path.basename(file)) //logo.jpg
  1. # index.js
  2. router.post("/file", async ctx => {
  3. var file = ctx.request.files.logo.path
  4. var baseName = path.basename(file);
  5. console.log(baseName)
  6. /* 1、创建一个可读流 */
  7. var reader = fs.createReadStream(file);
  8. /* 2、设置上传图片的文件名 */
  9. var upFilePath = `./static/${baseName}`;
  10. /* 3、创建一个可写流 */
  11. var writer = fs.createWriteStream(upFilePath);
  12. /* 4、可读流通过管道写入可写流 */
  13. reader.pipe(writer);
  14. ctx.body = "上传成功"
  15. })

1-5 完成版

  1. const koa = require("koa");
  2. const app = new koa();
  3. const fs = require("fs");
  4. const path = require("path");
  5. const router = require("koa-router")();
  6. const koaBody = require("koa-body");
  7. const static = require("koa-static");
  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(static(path.join(__dirname,"static")))
  23. app.use(koaBody({
  24. multipart: true,
  25. formidable: {
  26. maxFileSize: 200 * 1024 * 1024, //设置默认上传文件的大小
  27. // 保留文件扩展名
  28. keepExtensions: true
  29. }
  30. }))
  31. app.use(router.routes());
  32. app.listen(5000);