如何处理XMLHttpRequest的响应,其中responseText是压缩(gzip)格式

时间:2019-01-11 16:36:29

标签: javascript xmlhttprequest gzip

非常感谢任何关注此问题和有帮助的回答的人。

我正在探索尝试将文本文件从外部站点加载到我的站点的可能性。文本文件已使用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's 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's 'failed'
            }
request.send();

我希望我对此进行了解释,这样才有意义。所以,我的问题是:

  

我想做的是可能的吗? (强调可能而不是合理)

     

如果是这样,模糊的问题是,我如何读取响应以便可以对其进行处理和解压缩?更具体地说,如何以一种膨胀算法可以使用的方式从XMLHttpWebRequest中“读取”文本?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

确保使用正确的responseType。默认为“文本”,也许应该为“斑点”?