我在我的服务器上使用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
非常感谢所有试图帮助解决不同问题的人。我非常感谢您花时间回答我的问题。
答案 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增加一小部分开销。