Javascript 使用jsZip将图像从url添加到zip文件

Javascript 使用jsZip将图像从url添加到zip文件,javascript,jszip,Javascript,Jszip,我正在尝试使用jsZip创建一个zip文件。zip文件的内容是来自web的图像。 我创建了以下代码。但当我运行它时,我得到的只是一个22kb的空zip文件 var imgLinks=[“url1”、“url2”、“url3”]; 函数create_zip(){ var zip=newjszip(); 对于(变量i=0;i

我正在尝试使用jsZip创建一个zip文件。zip文件的内容是来自web的图像。 我创建了以下代码。但当我运行它时,我得到的只是一个22kb的空zip文件


var imgLinks=[“url1”、“url2”、“url3”];
函数create_zip(){
var zip=newjszip();
对于(变量i=0;i

单击按钮以生成ZIP文件
(url1、url2和url3替换为我要下载的图像URL)


为什么要获取这些空zip文件?

JSZipUtils.getBinaryContent
是异步的:内容将在调用
zip.generate()
后添加。在生成zip文件之前,应该等待所有图像

编辑:


如果正在加载的文件位于不同的服务器上,则此服务器需要发送其他HTTP头,如
访问控制允许来源:托管page.com的服务器
。在这种情况下,Firefox或Chrome调试控制台将显示错误。js库无法检测到问题(请参阅),并将在内容为空时触发成功。

那么,在生成zip之前,如何检查图像是否已完成加载?如果您使用的是延迟对象,则可以查看和使用函数
deferredAddZip
。它使用jQuery延迟对象,但是修改应该比您的回复更容易。尝试了代码,现在zip大小随提供的文件数而变化,所有图像都显示在zip文件中,但所有图像都是0字节的,在图像查看器中打开时没有显示任何内容。。。有什么想法吗?我的第一个想法是:在生成zip(
$.when.apply($,deferreds)
第75行)之前,检查是否等待所有延迟对象的解析。除此之外,您还可以使用调试器(或console.log)检查包含
数据的内容(在最近的浏览器上,它应该是ArrayBuffer)。如果您仍然找不到问题,我需要一个工作代码示例:),这是我正在使用的演示脚本,并且通过使用CORS代理成功找到了解决方法。它在firefox中运行良好,但在google chrome中使用时,我会出现“无文件失败”错误。你有固定版本吗?我刚刚使用了CORS代理。" "    .. 我将它附加到免费的CORS代理url,而不是直接url,这解决了问题。