node.js - 在 node.js 中读取非常大的 gzip 文件流
问题描述
我正在尝试在 node.js 中读取一个非常大的 gzipped csv 文件。到目前为止,我一直在使用 zlib:
file.createReadStream().pipe(zlib.createGunzip()
是我传递给 Papa.parse 的流。这适用于大多数文件,但它会因非常大的 gzip CSV 文件(250 MB,解压缩到 1.2 GB)而失败,并引发此错误:
Error: incorrect header check
at Zlib.zlibOnError [as onerror] (zlib.js:180:17) {
errno: -3,
code: 'Z_DATA_ERROR'
}
本来我以为是文件的大小导致了错误,但现在我不太确定了;可能是因为文件已使用不同的算法加密。zlib.error: 解压时出现错误 -3:不正确的标头检查建议通过-zlib.Z_MAX_WINDOWBITS
或zlib.Z_MAX_WINDOWBITS|16
纠正它,但我试过了,这不是问题。
解决方案
尽管绝对确定我们有一个 gzip 流,但事实证明我们没有。我们从一个 AWS S3 存储桶中获得了这个文件,该存储桶包含这个文件的许多版本,具有不同的时间戳。因此,我们根据前缀选择文件并仅加载最新的文件。
但是,S3 存储桶还包含带有有关这些文件的元数据的 json 文件。长期以来,我们总是得到 gzip 而不是 json,这纯粹是运气,而最近这种运气动摇了。所以我们总是得到一个 gzip 文件,这次我们得到了一个 json。
标头检查错误是完全正确的:我们正在查看的文件不是我们认为的 gzip 文件,因此它没有正确的标头。
将这个答案留在这里而不是删除问题,因为将来遇到此错误的人总是有可能绝对确定他们正在压缩正确的文件,而实际上并非如此。仔细检查您正在加载的文件。
推荐阅读
- c# - 将子控件项值发送到父表单文本框
- rust - 询问变量的附加值
- java - Teradata tdgssconfig.jar 和 terajdbc4.jar,传输失败 500 内部服务器错误
- javascript - 为什么我的 javascript 不起作用?当我更改元素的 interHtml 时,它不起作用
- opencl - 构建opencl程序时的错误代码-9999
- paypal - paypal HATEOAS 链接显示前 5 分钟总金额为 0 美元
- arduino - 如何以非常高的速度 (>4500 RPM) 从旋转编码器获取数据
- javascript - jsconfig.json 不能使用“需要”Node.js?
- spring - Spring Boot 在 Web 应用程序上下文中查找 bean
- vba - DateAddWorkdays 给出不一致的结果