Koa2 如何使用 koa-body 中间件进行文件上传?

什么是 Koa2?

Koa2 是一个基于 Node.js 平台的下一代 web 开发框架,它采用了 ES6 的语法并且使用了 async/await 这种更加优雅的异步处理方式。Koa2 的核心思想是中间件(middleware),通过组合不同的中间件来完成不同的功能。

什么是 koa-body?

koa-body 是 Koa2 中的一个中间件,用于解析 request body,支持多种格式的数据解析,包括 JSON、form、text 和文件上传等。

如何使用 koa-body 进行文件上传?

文件上传是 web 开发中常见的需求,使用 koa-body 中间件可以非常方便地实现文件上传功能。

首先需要安装 koa-body:

接下来,在 Koa2 应用中使用 koa-body 中间件:

const Koa = require('koa');
const koaBody = require('koa-body');

const app = new Koa();

app.use(koaBody({
  multipart: true, // 支持文件上传
  formidable: {
    uploadDir: './uploads', // 上传文件的目录
    keepExtensions: true, // 保留文件扩展名
    maxFileSize: 200 * 1024 * 1024 // 上传文件的最大大小为 200MB
  }
}));

app.listen(3000, () => {
  console.log('server is running at http://localhost:3000');
});

在上面的代码中,我们使用 koa-body 中间件,并设置 multipart 为 true,这样就可以支持文件上传了。同时,我们还设置了 formidable 配置项,指定了上传文件的目录、是否保留文件扩展名以及上传文件的最大大小。

接下来,我们可以在路由中处理文件上传的请求:

const Router = require('koa-router');
const fs = require('fs');

const router = new Router();

router.post('/upload', async (ctx, next) => {
  // 获取上传的文件
  const file = ctx.request.files.file;
  // 读取文件流并保存到指定目录
  const reader = fs.createReadStream(file.path);
  const filePath = `./uploads/${file.name}`;
  const writer = fs.createWriteStream(filePath);
  reader.pipe(writer);
  // 返回上传成功的信息
  ctx.body = {
    code: 200,
    message: '上传成功'
  };
});

app.use(router.routes()).use(router.allowedMethods());

在路由中,我们首先获取上传的文件,然后通过 fs 模块读取文件流并保存到指定目录。最后,返回上传成功的信息。

总结

通过使用 koa-body 中间件,我们可以非常方便地实现文件上传功能。同时,我们还可以通过设置 formidable 配置项来控制上传文件的目录、是否保留文件扩展名以及上传文件的最大大小。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/658d0d03eb4cecbf2d2fb540


纠错
反馈