将Ajax响应下载为zip文件? [英] Download Ajax response as zip file?

查看:780
本文介绍了将Ajax响应下载为zip文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将多个图像下载为zip文件.在使用Azure Blob时,首先列出所有Blob,然后使用 Archiver 并将其压缩函数将其发送给客户端.但是我将zip作为原始文件获取,并且没有下载.我正在使用Node js + Express. 服务器端脚本:

I am trying to download multiple images as a zip file. As I am using Azure blob, first I listed all blobs then compressed it using Archiver and used pipe function to send it to the client. But I am getting zip as a raw file and it is not downloading. I am using Node js + Express. Server-side script:

    function zipURLs(urls, outStream) {
  var zipArchive = archiver.create('zip');

  async.eachLimit(urls, 3, function(url, done) {
    console.log(url);
    var stream = request.get(url);

    stream.on('error', function(err) {
      return done(err);
    }).on('end', function() {
      return done();
    });

    // Use the last part of the URL as a filename within the ZIP archive.
    zipArchive.append(stream, { name : url.replace(/^.*\//, '') });
  }, function(err) {
    if (err) throw err;
    zipArchive.finalize();
    zipArchive.pipe(outStream);


  });
}

var data = {}; 
data.blob_name = value; 
console.log('downloading'); 
$.ajax({ 
    type: 'POST', 
    data: JSON.stringify(data),  
    contentType: 'application/json', 
    url: 'download/', 
    success: function(data) { console.log(data); }

上游是资源.所以我得到这样的数据:-

Outstream is res. So I get data like this:-

如何使用js直接下载为zip文件?

How can I download directly as zip file using js?

谢谢

推荐答案

使用ajax下载文件有很多事情,首先您必须能够访问二进制数据(不是默认的文本) ),方法是将responseType设置为blob. 然后,您必须实际使用一种方法来显示下载对话框,在下面您可以看到具有下载属性技术的锚点.

There is a lot that goes into using ajax to download a file, first you have to be able to access the data in binary(not text which is the default) by setting the responseType to blob. Then you have to use actually get a way to get the download dialog to show up, below you can see the anchor with download attribute technique.

jQuery.ajax({
        url:'download/',
        type:'POST',
        data: JSON.stringify(data),  
        contentType: 'application/json', 
        xhrFields:{
            responseType: 'blob'
        },
        success: function(data){
            var anchor = document.getElementById('a');
            var url = window.URL || window.webkitURL;
            anchor.href = url.createObjectURL(data);
            anchor.download = 'archive.zip';
            document.body.append(anchor);
            anchor.click();
            setTimeout(function(){  
                document.body.removeChild(anchor);
                url.revokeObjectURL(anchor.href);
            }, 1};
        },
        error:function(){

        }
    });

需要jQuery3 +

requires jQuery3+

这篇关于将Ajax响应下载为zip文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆