Appearance
koa-send
简介
koa-send 是一个用于安全地传输文件的中间件,它提供了一种安全可靠的方式来发送静态文件。这个中间件是许多其他中间件(如 koa-static)的基础,支持范围请求、条件请求等特性。
安装
bash
npm install koa-send基本使用
javascript
const Koa = require('koa');
const send = require('koa-send');
const path = require('path');
const app = new Koa();
app.use(async (ctx) => {
// 发送文件
if (ctx.path.startsWith('/download')) {
await send(ctx, 'file.txt', { root: path.join(__dirname, 'files') });
}
});
app.listen(3000);高级配置
javascript
const Koa = require('koa');
const send = require('koa-send');
const path = require('path');
const app = new Koa();
app.use(async (ctx) => {
await send(ctx, ctx.path, {
root: path.join(__dirname, 'public'), // 根目录
maxage: 1000 * 60 * 60 * 24 * 7, // 缓存时间(7天)
gzip: true, // 启用 gzip 压缩
brotli: true, // 启用 brotli 压缩
format: true, // 格式化路径
setHeaders: (res, path, stats) => { // 自定义响应头
res.setHeader('Cache-Control', 'private');
},
hidden: false // 是否发送隐藏文件
});
});
app.listen(3000);注意事项
- 始终指定 root 选项以限制文件访问范围,防止目录遍历攻击
- 谨慎使用 hidden 选项,避免意外暴露敏感文件
- 合理设置缓存时间,平衡性能和实时性
- 对于大文件传输,koa-send 会自动处理范围请求(Range headers)
- 建议配合错误处理中间件使用,优雅处理文件不存在等异常情况