Koa2 实现文件下载的几种方式

Koa2 是一款 Node.js 的 Web 框架,它的优点在于轻量、简单、灵活、易扩展等等。Koa2 中有一个非常重要的中间件 koa-send,它可以实现文件的下载和静态文件服务。在本文中,我们将介绍 Koa2 中实现文件下载的几种方式。

方式一:使用 koa-send 中间件

koa-send 是 Koa2 中一个非常实用的中间件,它可以帮助我们快速搭建静态文件服务,同时也可以实现文件的下载。在使用 koa-send 实现文件下载时,我们只需要设置响应头即可。

const Koa = require('koa');
const send = require('koa-send');
const app = new Koa();

app.use(async (ctx) => {
  const filePath = './example.txt';
  ctx.attachment(filePath);
  await send(ctx, filePath);
});

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

在上面的例子中,我们使用了 ctx.attachment(filePath) 方法设置了响应头,告诉浏览器需要下载该文件。然后使用 koa-send 中间件将文件发送给浏览器。

方式二:使用 fs 模块实现文件下载

另一种实现文件下载的方式是使用 Node.js 核心模块 fs。我们可以使用 fs 模块读取文件内容,并将其作为响应体返回给浏览器。同时,我们也需要设置响应头,告诉浏览器需要下载该文件。

const Koa = require('koa');
const fs = require('fs');
const app = new Koa();

app.use(async (ctx) => {
  const filePath = './example.txt';
  ctx.attachment(filePath);
  ctx.body = fs.createReadStream(filePath);
});

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

在上面的例子中,我们使用了 ctx.body = fs.createReadStream(filePath) 将文件内容作为响应体返回给浏览器。

方式三:使用 koa-router 实现文件下载

如果我们需要实现文件下载的路由,可以使用 koa-router 来实现。我们可以在路由中获取文件路径,然后使用上面的方式之一来实现文件下载。

const Koa = require('koa');
const Router = require('koa-router');
const send = require('koa-send');
const fs = require('fs');
const app = new Koa();
const router = new Router();

router.get('/download', async (ctx) => {
  const filePath = './example.txt';
  ctx.attachment(filePath);
  await send(ctx, filePath);
});

app.use(router.routes());

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

在上面的例子中,我们定义了一个 /download 路由,当用户访问该路由时,会触发文件下载操作。

总结

在本文中,我们介绍了 Koa2 中实现文件下载的几种方式。使用 koa-send 中间件是最简单的方式,同时也是最常用的方式。使用 fs 模块可以更加灵活地控制文件下载的过程。使用 koa-router 可以实现文件下载的路由。无论哪种方式,都需要设置响应头告诉浏览器需要下载该文件。希望本文能够帮助你更好地掌握 Koa2 中文件下载的技巧。

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


纠错
反馈