javascript - 使用 javascript 在 Web 浏览器中解压 csv 文件

标签 javascript browser zlib

我想从网络服务器下载 gzip 压缩的 csv 文件,然后在浏览器中解压缩。

到目前为止,我已尝试使用 pakozlib 将文件压缩到我的服务器上,但遇到了各种问题。尝试解压缩 unix-gzipped 文件时,我不断收到不正确的 header 消息。

接下来,我尝试使用节点在服务器上压缩文件,但目前出现此错误

Uncaught Error: invalid file signature:,�

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

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

我正在寻找在我的服务器上压缩文件并在浏览器中解压缩的任何方法。

最佳答案

需要 browser to support typedarrays 的纯二进制解决方案的另一个答案.使用此方法,无需使用 base64 编码,从而允许更小的文件大小。当不需要旧版浏览器支持时,建议使用此解决方案。

下载并添加对 pako_inflate.min.js 的引用.

这是我测试过的 HTML。

<html>
<head>
    <title>Binary Example</title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="~/Scripts/pako_inflate.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        var oReq = new XMLHttpRequest();
        oReq.open("GET", 'file.csv.gz?_=' + new Date().getTime(), true);
        oReq.responseType = "arraybuffer";
        oReq.onload = function (oEvent) {
            var arrayBuffer = oReq.response; // Note: not oReq.responseText
            if (arrayBuffer) {
                var byteArray = new Uint8Array(arrayBuffer);
                var data = pako.inflate(byteArray);
                //$('body').append(String.fromCharCode.apply(null, new Uint16Array(data)));  // debug
                $('#link').attr("href", "data:text/csv;base64," + btoa(String.fromCharCode.apply(null, new Uint16Array(data))));
            }
        };
        oReq.send(null);
    </script>
</head>
<body>
    <a id="link" download="file.csv">file</a>
</body>
</html> 

关于javascript - 使用 javascript 在 Web 浏览器中解压 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24490168/

相关文章:

c - 配置 libpng : "zlib not installed" 时出错

iphone - iPhone中的ZLib无法解压数据

javascript - 我可以在我的网站上使用或允许使用媒体 key 吗

javascript - 从 View 调用 Controller 中的操作并发送参数

javascript - 即使代码多次调用声音片段,如何也播放一次?

css - IE8/9 - CSS 文件的最大字节数

browser - 我的 SSL 证书有效吗?

c# - zlib 的 gzip 压缩和 .NET 的 GZipStream 使用的压缩有什么区别?

javascript - 将外部变量传递给 promise .then 而不调用它

安卓浏览器扩展