В ответе API есть файл, не удается извлечь содержимое файла

Я создаю приложение NodeJS, в котором мне нужно использовать Slack API. Поэтому, используя запрос GET, я вызываю API и получаю ответ в файле gunzip. Как только я разархивирую gunzip, содержимое внутри будет просто данными в формате json.
Я могу вызвать Slack API и получить ответ, но не могу распаковать содержимое файла.
Я обнаружил, что для этого мы можем использовать «сохранение файлов». Вот код:

const response = await fetch(URL, obj);

    if (!response.ok) {
      throw new Error(response);
    }

    // Extract filename from header
    const filename = response.headers.get('content-disposition')
      .split(';')
      .find(n => n.includes('filename='))
      .replace('filename=', '')
      .trim()
    ;

    const blob = new Blob([JSON.stringify(response.body)], { type: 'text/plain' });

    // Download the file
    saveAs(blob, filename);


Это не сохраняет ни один файл. Я только что получил ответ от API.
Ответ API:

 type: 'default',
    url: 'https://slack.com/api/admin.analytics.getFile?type=member&date=2022-09-20&pretty=1',
    status: 200,
    statusText: 'OK',
    headers: {
      'access-control-allow-headers': 'slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, x-b3-sampled, x-b3-flags',
      'access-control-allow-origin': '*',
      'access-control-expose-headers': 'x-slack-req-id, retry-after',
      'cache-control': 'private',
      connection: 'close',
      'content-disposition': `attachment; filename = "Analytics_2022_09_20.json.gz"; filename*=utf-8''Analytics%202022-09-20.json.gz`,
      'content-type': 'application/gzip',
      date: 'Mon, 10 Oct 2022 04:20:55 GMT',
      expires: 'Mon, 26 Jul 1997 05:00:00 GMT',
      pragma: 'private',
      'referrer-policy': 'no-referrer',


Я также обнаружил, что мы можем использовать «zlib» для извлечения содержимого файла gunzip. Я не мог заставить это работать, вот код:

import {gzip, gunzip} from "zlib";

var options = {
                url: URL,
                headers: {
                    'api_key': 'Bearer ' +  process.env.accesstoken,
                    'Content-Type': 'application/json',
                    'Accept-Encoding': 'gzip'
                },
                encoding: null 

            };

        request(options, function(err, response, body){
        
                var encoding = response.headers['content-encoding']

                if (encoding && encoding.indexOf('gzip') >= 0) {

                  gunzip(body, function(err, dezipped) {
                    var json_string = dezipped.toString('utf-8');
                    var json = JSON.parse(json_string);
                    console.info('JSON content: ',json);
                  });

                } else {
                    console.info('not gzipped!');
                }

        })  



В этом ответ, который я получаю от самого API, отличается. Как еще я могу извлечь содержимое файла gunzip? Любые предложения были бы замечательными!

Можете ли вы попробовать преобразовать большой двоичный объект в base64, а затем попытаться сохранить его...

saisuresh 10.10.2022 11:49

@saisuresh Добавление base64 не сработало

Winterella 10.10.2022 15:31
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это код, который работал для меня:

request(URL, {     //fetch slack data from API
    headers: {
        Authorization: 'Bearer ' +  process.env.accesstoken,
    }})
        .pipe(zlib.createGunzip())
        .pipe(
        concat((stringBuffer) => {
            result = stringBuffer.toString()
            fs.writeFileSync('gzip-file.json', result, (error) => {
                if (error) throw error;
              });
        })
        );

Другие вопросы по теме