我想从网络服务器下载 gzip 压缩的 csv 文件,然后在浏览器中解压。
到目前为止我已经尝试使用pako
and zlib
将文件压缩到我的服务器上,但遇到了各种问题。尝试解压缩 unix-gzipped 文件时,我不断收到错误的标头消息。
接下来,我尝试使用节点在服务器上压缩文件,目前收到此错误
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();
});
我正在寻找任何方法来在我的服务器上压缩文件并在浏览器中解压缩它。
纯二进制解决方案的另一个答案需要浏览器支持类型数组 http://caniuse.com/#feat=typedarrays。使用这种方法,不需要使用base64编码,从而允许更小的文件大小。当不需要较旧的浏览器支持时,建议使用此解决方案。
下载并添加参考pako_inflate.min.js https://raw.githubusercontent.com/nodeca/pako/master/dist/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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)