如何解压缩文件并在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响应而不是解压缩(。它使用节点流API中的pipeline函数,而不仅仅是.pipe,但它应该为您提供一个良好的模型。请参阅底部附近的服务器位以获取writeHead,然后是pipeline:

/* ... */ {
response.writeHead(200, { /* whatever headers you need here */ });
pipeline(raw, zlib.createGzip(), response, onError);
}

这有帮助吗?

最新更新