是否可以在从其他服务器下载之前动态压缩文件?

时间:2012-06-26 16:21:51

标签: javascript zip

我想知道是否可以编写浏览器扩展或简单的Java脚本代码,其中包含不同位置的URL列表,可以将所有内容压缩在一起。

我的意思是......

例如......有3个不同的图像文件:

可以在http://mysite.com上通过Java脚本代码将所有这些文件下载为压缩文件存档images.zip吗?

我找到JSZip,但我不知道如何使用它来加载来自不同服务器的文件。

1 个答案:

答案 0 :(得分:5)

看看这段代码:我已经汇集了一个Demo,让你从那里开始。向下滚动到代码的最后几行。

首先,我们需要将图像添加到<img>标记中。然后我们将阅读它们的内容。然后所有都可以通过jszip完成。

但有一些限制。您无法从其他域加载图像。所以图像应该在同一个URL中,或者通过服务器端动态加载它们,如: http://yourdomain.com/fileLoader.php?url=Url_To_External_Image

这是执行魔术的代码snipee:

function getBase64Image(imgage) {
    var canvas = document.createElement("canvas");
    canvas.width = imgage.width;
    canvas.height = imgage.height;

    var ctx = canvas.getContext("2d");
    ctx.drawImage(imgage, 0, 0);

    var dataURL = canvas.toDataURL("image/png");
    return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
}

var img = $("<img />").attr('src', '../../../img/logo.png');

img.load(function() {
    if (!this.complete || typeof this.naturalWidth == "undefined" || this.naturalWidth == 0) {
        alert('broken image!');
    }
    else {
        var zip = new JSZip();
        content = getBase64Image(img[0]);
        zip.file("24.jpg", content + "\n");
        var content = zip.generate();
        location.href="data:application/zip;base64,"+content;
    }
});