使用javascript在Web浏览器中使用Ungzip csv文件

Sol*_*mon 6 javascript browser zlib

我想从Web服务器下载gzipped csv文件,然后在浏览器中下载ungzip.

到目前为止,我已尝试使用pakozlib在我的服务器上取一个文件gzip,但有各种问题.试图解压缩unix-gzip文件,我不断收到错误的标题消息.

接下来,我尝试使用node来压缩服务器上的文件,目前我收到此错误

Uncaught Error: invalid file signature:,?
Run Code Online (Sandbox Code Playgroud)

这是我用来获取文件的命令:

$.ajax({ type: "GET", url: 'public/pols_zlib.csv.gz'})
  .done(function(d){
    var gunzip = new Zlib.Gunzip(d);
    plain = gunzip.decompress(); 
  });
Run Code Online (Sandbox Code Playgroud)

我正在寻找任何方式来压缩我的服务器上的文件并在浏览器中解压缩它.

Sha*_*awn 1

我相信我之前的答案很有价值,因此我在这里创建一个单独的答案来解决这个更具体的用例。条件是:

  1. 无法控制服务器
  2. 上传之前必须限制 csv 文件的大小
  3. 服务器未使用 gzip 对 csv 进行编码

我建议使用JSXCompressor库在客户端上用 javascript 解码 gzip 文件。

但是,gzip 文件必须首先进行 Base64 编码。以下 linux 命令将执行此操作:

gzip -c file.csv | base64 > file.csv.gz.txt
Run Code Online (Sandbox Code Playgroud)

我建议使用 .txt 文件扩展名以确保服务器像文本一样处理它。

由于我使用 DataURI 下载 csv(见下文),因此您可以在 gzip 压缩之前对其进行 Base64 编码,以保存在客户端上进行的操作。但是,它会增加文件大小(您试图避免这种情况)。

文件经过 gzip 和 base64 处理后,就可以上传到服务器。请注意,base64 会增加大量开销,但这是必需的。对于较小的文件,它更加明显:

uncompressed:        91 kB
compressed:          38 kB
compressed + base64: 72 kB

uncompressed:        8.2 MB
compressed:          1.9 MB
compressed + base64: 2.6 MB
Run Code Online (Sandbox Code Playgroud)

这是 HTML 标记。这是我测试过的一个工作示例。

gzip -c file.csv | base64 > file.csv.gz.txt
Run Code Online (Sandbox Code Playgroud)