如何解压缩用zlib.gzipSync在Node中压缩的blob?

时间:2018-12-12 19:28:51

标签: javascript node.js gzip zlib koa

在使用Koa的Node服务器上,我(我认为)正在压缩JSON兼容的字符串,并将其发送给客户端,如下所示:

ctx.attachment('libraries.gz');
ctx.body = zlib.gzipSync(json).toString('base64');
ctx.status = 200;

我尝试命名文件“ libraries.gz”和“ libraries.json”。都不行。

我尝试删除.toString方面,这导致客户端收到一个空文件(由cat演示并尝试在存档器中打开它)。

在客户端,我正在使用“创建blob并以编程方式单击<a>标记技巧”打开文件下载对话框。

xhr.onload = function() {
    if (this.status === 200) {
        // Create a new Blob object using the response data of the onload object
        var blob = new Blob([this.response], { type: 'application/json' });
        // Create a link element, hide it, direct it towards the blob, and then 'click' it programatically
        let a = document.createElement('a');
        a.style = 'display: none';
        document.body.appendChild(a);
        // Create a DOMString representing the blob and point the link element towards it
        let url = window.URL.createObjectURL(blob);
        a.href = url;
        a.download = 'libraries.json';
        // programatically click the link to trigger the download
        a.click();
        // release the reference to the file by revoking the Object URL
        window.URL.revokeObjectURL(url);
    } 
};

我尝试将a.downloadlibraries.json都设置为libraries.gz。据我所知,gzip没有任何模仿类型,因此我不确定除application/json之外还要放什么。

在所有情况下,客户端都会收到一个很大的,人类无法读取的文件,在我看来,这是压缩数据。但是,所有对其进行解压缩的尝试(在命令行中,使用我的操作系统的存档工具等)总是会失败。 Gunzip抱怨这不是gzip文件,Archiver说该文件有问题,等等。

我希望我的误解围绕文件扩展名和mimetype,以及服务器和客户端这两者之间的关系。

如何解压缩从使用zlib.gzipSync压缩该blob的服务器下载的blob?

0 个答案:

没有答案