Gzip文件和Angular 2

问题描述:

我有一些文件使用我的服务器上的gzip(.gz文件类型)存储进行压缩。Gzip文件和Angular 2

我使用服务(角2)可观察到的下载文件到客户端计算机:

this.rest.getFile(this.stlLocation).subscribe(
      data => { 

        console.log(data); 
        //OK, now I have my .gz file containing a compressed JSON file. 
        //What do I need to do in angular 2 to decompress and read the JSON data in the file? 

       }, 
       err => { 
        this.msgs.push({severity: 'error', summary: 'Error Message', detail: err}); 
       } 
      ); 

我怎么能解压缩并获得普通JSON文件一旦成功下载?

更新...

谢谢荷兰Joh送我在正确的道路上。看到接受的答案。经过一番阅读后,我已经实施了以下解决方案。

据荷兰Joh:

“如果你正在下载的文件浏览器,你不应该有 做任何浏览器中添加的Accept-Encoding:‘放气’头 自动;它。在DOM/JS级别执行这个 是不必要的也不是很好的做法。“

如果您使用NGINX以下链接可以帮助你:

NGINX COMPRESSION AND DECOMPRESSION

一个巨大的感谢所有那些试图帮助不同的解决方案的其他人。我非常感谢您花时间回答我的问题。

+0

使用任何gzip提取器 –

+0

嗨拉胡尔,它是一个JavaScript库?我可以在哪里找到它? – Dino

+0

迪诺它将被下载到你的本地系统你将如何访问它?我对最终用户 –

如果将文件下载到浏览器,你不应该做任何事情。浏览器自己自动添加Accept-Encoding: 'deflate'标题;在DOM/JS级别执行此操作既不必要也不好,因为浏览器应为您处理此问题。 GZipping是用于网络传输,编码是在请求头中处理的;浏览器应该为你解开这个。所以,你有一个文件,它应该可以用作JSON(如果使用Angular的Http服务,你将不得不解析json,即Observable.map(res => res.json()))。

注意:如果这个未压缩的文件低于〜1.4Kb,那么最好不要离开。无论如何,小文件将被发送到单个数据包中,而gzip只会给DOM和CPU增加一个小的开销。

+0

嗨,joh,原谅我的无知,但我只开发了一小部分的应用程序。发生的情况如下:有人创建了我需要下载的文件(大型JSON),然后将gzip上传到服务器。我的工作是下载它们,将它们解压缩并将对象存储到文件中。在我的服务中,Observable.map(res => res.json())行不会返回文件,但如果我检查res => res的结果,我可以看到解压缩的文件。我相信我不了解Gzip压缩的工作级别以及如何正确应用它。 – Dino

+0

嗨Joh,经过一番阅读后,我想我已经理解你的意思,并且已经实施了我的问题的“更新部分”中描述的解决方案。非常感谢您的宝贵帮助。 – Dino

如果您正在使用NPM你可以使用这样的事情: https://www.npmjs.com/package/gzipy

从用法:

//Import gzipy 
var gzipy = require('gzipy'); 

//Compress a file 
gzipy.compress('./file.txt', './file.txt.gz', function(error) 
{ 
    //Handle the error 
    if(error){ /* Something went wrong... */ } 

    console.log('File compressed!'); 
}); 

//Decompress a file 
gzipy.decompress('./document.pdf.gz', './document.pdf', function(error) 
{ 
    //Handle the error 
    if(error){ /* Something went wrong... */ } 

    console.log('File decompressed'); 
}); 
+0

谢谢你的帮助,Erica。最后,我走了另一条路,但我很欣赏你奉献给我的时间。感谢您分享知识,我相信gzipy将在未来证明有用。迪诺 – Dino

+0

没问题。我很高兴你找到了适合你的东西:) –