文件下载需要使用到koa-send这个插件,该插件是一个静态文件服务的中间件,它可以用来实现文件下载的功能。
1.下载页面
static/download.html
<!DOCTYPE html> <html> <head> <meta charset=utf-8> <title>文件下载演示</title> </head> <body> <div> <button onclick="fileLoad()">文件下载</button> <iframe name="iframeId" style="display:none"></iframe> </div> <script type="text/javascript"> function fileLoad() { window.open('/static/upload/pro_03.jpg', 'iframeId'); } </script> </body> </html>
2.app.js 所有的代码改成如下:
// 引入模块 const Koa = require('koa'); const fs = require('fs'); const path = require('path'); const router = require('koa-router')(); const koaBody = require('koa-body'); const static = require('koa-static'); const send = require('koa-send'); // 实例化 const app = new Koa(); app.use(koaBody()); router.get('/', (ctx) => { // 设置头类型, 如果不设置,会直接下载该页面 ctx.type = 'html'; // 读取文件 const pathUrl = path.join(__dirname, '/static/download.html'); ctx.body = fs.createReadStream(pathUrl); }); router.get('/fileload/:name', async (ctx) => { const name = ctx.params.name; const path = `static/upload/${name}`; ctx.attachment(path); await send(ctx, path); }); // 配置静态资源路径 app.use(static(path.join(__dirname))); // 启动路由 app.use(router.routes()).use(router.allowedMethods()); // 监听端口号 app.listen(3001, () => { console.log('server is listen in 3001'); });
.