Gzip文件和Angular 2

时间:2017-08-04 16:18:25

标签: angular gzip

我在我的服务器上使用gzip(.gz文件类型)存储压缩了一些文件。

我使用服务(Angular 2)和一个observable将文件下载到客户端机器:

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文件?

更新...

谢谢你让我走上正确的道路。见接受的答案。经过一番阅读,我已经实现了以下解决方案。

根据约翰的说法:

  

"如果您要将文件下载到浏览器,则不应该这样做   做任何事情。浏览器添加了Accept-Encoding:' deflate'头   自动;这样做既不必要也不好   在DOM / JS级别。"

如果您使用NGINX,以下链接可能会帮助您:

NGINX COMPRESSION AND DECOMPRESSION

非常感谢所有试图帮助解决不同问题的人。我非常感谢您花时间回答我的问题。

2 个答案:

答案 0 :(得分:0)

如果您使用的是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');
});

答案 1 :(得分:0)

如果要将文件下载到浏览器,则不必执行任何操作。浏览器自动添加Accept-Encoding: 'deflate'标头;在DOM / JS级别执行此操作既不必要也不好,因为浏览器应该为您处理此问题。 GZipping用于网络传输,编码在请求头中处理;浏览器应该为你解开这个。

所以,一旦你有了这个文件,它就可以用作JSON(如果使用Angular' Http服务,你将不得不解析JSON,即Observable.map(res => res.json()))。

旁注:如果这个未压缩的文件低于~1.4Kb,那么最好不要解压缩。无论如何,将在单个数据包中发送小的文件,而gzipping只会给DOM和CPU增加一小部分开销。