首页 > 解决方案 > 如何解压缩文件并在 Node.js 中发送它作为响应?

问题描述

我有一个端点,我只用它的名字提供一个文件。该文件具有 .gz 格式,因此我必须在发送响应之前将其解压缩。

这是代码的一部分:

const unzip = zlib.createGunzip();
const rs = fs.createReadStream(filePath);
rs.pipe(unzip).pipe(response);

使用此代码,我在浏览器中获取文件的大小,但它没有开始下载,在服务器上重复 GET 请求并最终引发错误。

如果我删除.pipe(unzip)并保留它作为rs.pipe(response)文件服务但(显然)解压缩。

你能否指出我做错了什么。

标签: javascriptnode.jszlib

解决方案


您的问题是什么类型的对象/流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);
  }

这有帮助吗?


推荐阅读