0

我正在尝试调用亚马逊广告 api 并下载活动报告,到目前为止成功地能够做到以下几点:

创建一个活动报告,获取报告 ID 并使用报告 ID,我可以获得 s3 下载 url。

问题是,当我尝试下载数据时 - api 返回的响应应该是经过压缩的 json 格式并采用以下格式:

��VJN�-H�L��LQ�2227��45�017�����b%+����������<

如何从这种压缩格式中提取 json 数据?我已经搜索并在 SO 上找到了类似的线程:

为什么亚马逊广告报告 API 返回 .bin 而不是 .json

我还可以使用此线程上建议的“发送和下载”选项从邮递员那里获取有效的 json 文件。

但是在尝试在nodejs中实现解压代码时卡住了,解析响应数据的代码片段

await axios.get(downloadurl, options)

        .then(async response => {
         console.log(response.data);
        
        // Calling gzip method
        zlib.gzip(response.data, (err, buffer) => {
  
        // Calling unzip method
        zlib.unzip(buffer, (err, buffer) => {
  
       console.log(buffer.toString('utf8'));
       finaldata =  buffer.toString('utf8');
      
     });
 });

// write data to file
 await fsPromises.writeFile('/Users/asbdb/Downloads/test1/test.json', finaldata);
    
        })
        .catch(error => {
            console.log({ error });
        });

有关如何解压缩和转换字符串格式数据的任何指示都将非常有帮助。

上面的代码片段将其写入输出文件: 文件中的输出

4

1 回答 1

2

用于zlib.gunzip()提取内容。

您所拥有的是 gzip 流,而不是 zip 文件,因此zlib.unzip()无济于事。zlib.gzip() compresses,而不是提取物,您正在寻找提取物。

于 2022-01-30T21:58:59.310 回答