我想从网络服务器下载 gzip 压缩的 csv 文件,然后在浏览器中解压缩。
到目前为止,我已尝试使用 pako
和 zlib
将文件压缩到我的服务器上,但遇到了各种问题。尝试解压缩 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/