javascript - 如何解压缩文件并在 Node.js 中发送它作为响应?
问题描述
我有一个端点,我只用它的名字提供一个文件。该文件具有 .gz 格式,因此我必须在发送响应之前将其解压缩。
这是代码的一部分:
const unzip = zlib.createGunzip();
const rs = fs.createReadStream(filePath);
rs.pipe(unzip).pipe(response);
使用此代码,我在浏览器中获取文件的大小,但它没有开始下载,在服务器上重复 GET 请求并最终引发错误。
如果我删除.pipe(unzip)
并保留它作为rs.pipe(response)
文件服务但(显然)解压缩。
你能否指出我做错了什么。
解决方案
您的问题是什么类型的对象/流response
?如果它是本机节点http.ServerResponse
,您仍然需要先编写 HTTP 标头,也许使用response.writeHead
.
zlib 文档页面中有一个官方示例(尽管相反,压缩 HTTP 响应而不是解压缩它)。它使用pipeline
来自节点流 API 的函数,而不仅仅是,.pipe
但它应该为您提供一个很好的模型来遵循。请参阅底部附近的服务器位,writeHead
然后是pipeline
:
/* ... */ {
response.writeHead(200, { /* whatever headers you need here */ });
pipeline(raw, zlib.createGzip(), response, onError);
}
这有帮助吗?
推荐阅读
- java - 如何使用 OSGi 声明式服务正确实现 servlet?
- oracle - 将列中的多个值连接到行中而不添加一些值
- sql - 根据两列在 SQL 中选择唯一匹配的行
- javascript - 如何以编程方式启动 Vuetify 对话框并等待响应
- c - 如何修复这个 do-while 循环,以便控制台程序在自动关闭之前提示用户?
- sql - 如何在 SQL Server 中找到依赖表及其依赖表?
- excel - 如何在excel中加入两个范围以在公式中使用?
- c# - ASP.NET Core 自定义 Anchor Tag Helper
- php - 使用 Laravel 5.8 部署到生产环境会删除我的公共上传存储目录
- mongodb - MongoDB 主副本在辅助副本可以自行同步之前失败