我正在做一个Web应用程序的本地开发,需要从客户端的某些文件中创建一个zip存档。我有一个非常简单的测试页面,其中包含一个按钮和下载链接。单击按钮将使用jszip library生成一个zip文件,其中包括一个使用XMLHttpRequest加载的png图像。当您单击下载链接时,将下载一个存档,其中包含一个png图像文件,但是png图像已损坏。 Windows告诉我:
“ WinZip Viewer无法显示图像,因为图像文件丢失或无效;图像被跳过。”
我尝试按照“常规”的解决方案将高位字节固定为0xff,但得到的结果相同。 (这是我的GetZip2()函数。)
谁能提供有关zip内容为何损坏的想法?
提前致谢
HTML代码:
<html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
<title>Zip Get Test</title>
<script src="ZipTest.js" type='text/javascript'></script>
<script src="jszip.js" type='text/javascript'></script>
</head>
<body>
<input type="Button" id='btnBlob' value="Get image zip" onclick="GetZip2();">
<a id="download_link" href="url">Download</a>
</body>
js代码:
function GetZip(){
var filename = "BlueRefresh.png";
var xhr=new XMLHttpRequest();
xhr.open("GET", filename, false);
xhr.overrideMimeType('text/plain; charset=x-user-defined');
xhr.send();
var data = xhr.responseText;
var zip = new JSZip();
zip.file(filename, data);
//make a blob out of the image string
var blob = zip.generate({type:"blob"});
var myLink = document.getElementById("download_link")
myLink.href = window.URL.createObjectURL(blob);
myLink.download = "Archive.zip";
}
function GetZip2(){
var filename = "BlueRefresh.png";
var xhr=new XMLHttpRequest();
xhr.open("GET", filename, false);
xhr.overrideMimeType('text/plain; charset=x-user-defined');
xhr.send();
var data = xhr.responseText;
var s2 = "";
for (x = 0; x<data.length; ++x) {
code = data.charCodeAt(x) & 0xff;
s2 += String.fromCharCode(code);
}
data = s2;
var zip = new JSZip();
zip.file(filename, data);
//make a blob out of the image string
var blob = zip.generate({type:"blob"});
var myLink = document.getElementById("download_link")
myLink.href = window.URL.createObjectURL(blob);
myLink.download = "Archive.zip";
}
最佳答案
遇到相同的问题,我通过在binary : true
函数中添加选项zip.file
来解决。
zip.file(filename, data, {binary : true});
同样,默认情况下,jsZip使用
STORE
(无压缩),因此您可能还需要添加compression : "DEFLATE"
。在这里查看说明。 http://stuk.github.io/jszip/documentation/api_jszip/file_data.htmlzip.file(filename, data, {binary : true, compression : "DEFLATE"});
关于javascript - 使用jszip损坏了存档内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21995329/