javascript - zlibgunzip 解压缩不同的缓冲区大小,每次在同一文件上运行

标签 javascript node.js zlib gunzip

我正在从电影数据库下载每日导出的 gzip 文件并使用 zlib 对其进行解压缩。当 end 事件发生时,我记录解压缩的数据字符串的长度。每次的长度都不一样。

数据似乎没有完全解压。当我开始解析文件实际包含的 JSON 时,我注意到了这一点。它会在转换每一行 JSON 时进行到一半(每一行代表一个独立的 json 对象)并因为 json 格式错误而崩溃。

var http = require('http');
var zlib = require('zlib');

var downloadUrl = "http://files.tmdb.org/p/exports/movie_ids_03_01_2018.json.gz";
http.get(downloadUrl, function(response) {
    var fileContents = "";
    var gunzip = zlib.createGunzip();

    gunzip.on('data', function(data) {
        fileContents += data.toString();
    });

    gunzip.on('end', function() {
        console.log(fileContents.length);
    });

    response.pipe(gunzip);
});

我是否错误地使用了gunzip 事件?

我有一个reproducible example您可以执行以查看它的运行情况。

最佳答案

我通过替换 http 的用法解决了这个问题与 request 。我不确定我做错了什么http.get但管道 gunzip进入request返回值解决了我的问题。

var request = require('request');
var zlib = require('zlib');
var fs = require('fs');

var downloadUrl = "http://files.tmdb.org/p/exports/movie_ids_03_01_2018.json.gz";
var response = request(downloadUrl);
var fileContents = "";
var gunzip = zlib.createGunzip();

gunzip.on('data', function(data) {
    fileContents += data.toString();
});

gunzip.on('end', function() {
    var json = fileContents.split('\n').filter(function(value, index) {
        if (value == "") {
            console.log(index + " is empty and skipped.");
            return false;
        }

        return true;
    });
});

response.pipe(gunzip);

我尝试使用request.get(options, function(error, response, body){});但无法通过管道 gunzip进入响应或正文。我是流新手,需要进行更多研究才能找出问题所在。同时,上述解决方案可以正常工作。

由于它作为 Azure 函数每天运行一次,因此像这样同步运行它并不是什么大问题。我不会阻止任何进一步的工作。

关于javascript - zlibgunzip 解压缩不同的缓冲区大小,每次在同一文件上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49062337/

相关文章:

c++ - 使用 zlib 的 gzip 文件访问功能的未压缩文件大小

javascript - 是否有类似于 MATLAB erfinv() 的逆误差函数的 JavaScript 实现?

javascript - 否则 rgba 不能在 javascript 中工作

javascript - Node.js 中的 jQuery 方法

node.js - EmberJS Express API | TypeError : app. 路由不是 module.exports 中的函数

node.js - 具有 23G 可用磁盘空间的 EC2 卷上出现 ENOSPC 错误

streaming - zlib,如何解压缩压缩数据 block 流?

javascript - console.log 避免最大调用堆栈

javascript - 将 obj 推送到 arr 时函数输出奇怪的结果

C++ CLR 在 Visual Studio 中使用 Zlib 的 Minizip