Как обработать ответ XMLHttpRequest, где responseText представляет собой сжатый (gzip) формат

1

Я очень ценю любого, кто смотрит на этот вопрос и любые полезные ответы.

Я изучаю возможность загрузки текстового файла с внешнего сайта на мой сайт. Текстовый файл был сжат или сдут с помощью gzip, поэтому путь выглядит как https://host/filename.txt.gz

Я пытаюсь загрузить содержимое с помощью XMLHttpRequest, а затем пытаюсь распаковать/раздуть содержимое, используя эту библиотеку https://github.com/augustl/js-inflate. Тип содержимого ответа: Application/Octet-stream.

Итак, моя проблема в том, что, несмотря на то, что текст responseText декодируется, многие из произведенных символов являются "символом замены" (код 65533 или ). Насколько я понимаю, это происходит, когда декодер не может обработать последовательность байтов.

Текстовые файлы, которые я пытаюсь декодировать/распаковать, безусловно, действительны, потому что если я их загружаю, они могут быть распакованы и просмотрены очень хорошо.

var request = new XMLHttpRequest();
request.open('GET', 'https://host.something/filename.txt.gz');
request.onload = function() {
    // the request text is all, there, looking like ��'�P GSE43615_non_normalized.txt t�I�,A�$���}���yXFf����D��...
    var infwated = JSInflate.inflate(request.responseText);  // (note: tried to base64decode the response first in case that it.  it doesn't seem to be)
    // the 'inflated' result comes back as an empty string.  
    // As I debug the JSInflate library, it appears the the library is looking for bytes to signal how the text should be processed.
    // The code breaks out of the processing in the first conditional because the byte is not recognized
    console.log(infwated || 'failed');  // it 'failed'
            }
request.send();

Я надеюсь, что объяснил это, так что это имеет смысл. Итак, мои вопросы:

Возможно ли то, что я пытаюсь сделать? (акцент на возможном, а не на разумном)

Если так, то неясный вопрос: как мне прочитать ответ, чтобы его можно было обработать и распаковать? В частности, как можно "читать" текст из XMLHttpWebRequest таким образом, чтобы с ним мог работать раздувающий алгоритм?

Большое спасибо за любую помощь !!!

  • 0
    Эта библиотека кажется устаревшей ... попробуйте одну из предложенных вместо этого?
  • 0
    Да, это устарело. У меня сложилось впечатление, что автор больше не поддерживает его. Авторские тесты по-прежнему проходят, поэтому я предположил, что он работает. Я попробовал другие библиотеки с тем же результатом. Я выбрал библиотеку из-за ее относительной простоты и легкости по сравнению с другими. Как вы думаете, ошибка, возможно, не в ответе, а в алгоритме надувания?
Показать ещё 4 комментария
Теги:
xmlhttprequest
gzip

1 ответ

0

Убедитесь, что вы используете правильный responseType. "Текст" по умолчанию, возможно, это должен быть "блоб"?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню