如何通过ajax获取多个文件并通过JavaScript下载它们作为zip文件?

时间:2015-07-13 13:13:23

标签: javascript ajax zip

是否可以创建一个仅使用JavaScript编写的客户端站点应用程序(在浏览器中运行),该应用程序通过ajax获取多个图像文件,然后将其压缩为zip(或tar或其他)并将其返回给用户作为文件下载(没有任何服务器端逻辑)?

工作流程如下:

  1. 在浏览器中打开网站mydomain.com
  2. 网站通过ajax从mydomain.com/images/image1.pngmydomain.com/images/image2.jpg收集图片。
  3. 这两个文件现在都自动压缩为存档文件(例如zip,gzip或tar等)
  4. 用户获取此浏览器的常用下载提示。
  5. 到目前为止,我认为我可以通过jQuery运行第1-2部分:

    var urls = [
      'image1.png',
      'image2.jpg'
    ];
    var images = [];
    var counter = 0;
    
    function createArchive(images){
      // How to implement this?
    }
    
    function download(archive){
      // How to implement this?
    }
    
    for (var i = 0; i<urls.length; i++) {
      $.ajax('images/' + urls[i]).done(function(data) {
        images.push(data);
        counter++;
    
        // Offer download of archive when all ajax calls are done
        if (counter == urls.length){
          var archive = createArchive(images);
          download(archive);
        }
      });
    }
    

    但是从这里我不知道如何从images数组创建zip文件。我该怎么做?

    重要:这必须在IE,Firefox,Chrome,Safari等所有主要浏览器中运行

2 个答案:

答案 0 :(得分:3)

圣洁的莫莉!我使用这些库来使用它:

<强> HTML

Cursor videocursor = getActivity().getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                        columns,
                        MediaStore.Video.Media.DATA + " like ? ",
                        new String[]{"%/" + Your folder name + "/%"},
                        null);

我的 script.js

<!doctype html>

<html>

  <head>
    <title>Zipper</title>
    <script src="jszip.min.js"></script>
    <script src="FileSaver.min.js"></script>
    <script src="script.js"></script>
  </head>

  <body>

  </body>

</html>

答案 1 :(得分:0)

简短的回答,没有。 JavaScript可以从服务器下载数据,并且可以通过某些库实现压缩(Google快速返回两个结果https://gildas-lormeau.github.io/zip.jshttps://stuk.github.io/jszip,后者是Node实现),但是从客户端执行下载是不可能的。

您必须拥有某种服务器逻辑,我建议您拨打一个可以生成文件和zip的电话。