通过AJAX返回ZIP文件

时间:2016-04-12 07:05:42

标签: jquery python ajax flask zip

我需要下载通过AJAX触发的文件。我的代码从临时文件夹中的URL检索图像,并在此临时文件夹中创建文件的内存zip。我想将文件路径推送到客户端。我该怎么做?

这是我的压缩代码:

#This function creates a temp folder, downloads images in it and returns the path
temp_dir = retrieve_images(file_paths)

in_memory_loc = io.BytesIO()

zipf = zipfile.ZipFile(, 'w')
zipdir(temp_dir, zipf)
zipf.close()

#remove the temp directory
shutil.rmtree(temp_dir)

in_memory_loc.seek(0)

#output the zip file to the browser
return send_file(in_memory_loc, attachment_filename='site_images.zip', as_attachment=False)

当我使用传统的表单提交方式时,这是有效的。但我需要通过AJAX返回。通过AJAX返回文件似乎是不可能的,因此我想返回zip文件路径。我该怎么做?

3 个答案:

答案 0 :(得分:1)

创建该资源的URL并将其发送回ajax,使用window.open('url')触发下载;在成功函数中

您拥有临时目录的名称以及您拥有构建网址所需的所有文件的名称

答案 1 :(得分:1)

You can't prompt a file download with an XHR response,因此服务器必须保留zip文件的内容,并等待客户端发出第二个HTTP请求来执行下载。

一种方法是将内容存储在随机生成的密钥下的memcache中,并使用XHR响应返回密钥。然后,客户端可以在非XHR请求中将该密钥传递回服务器以请求该文件。

答案 2 :(得分:0)

(没有ajax)
您可以使用 Jquery 点击功能中的窗口位置来下载 zip 文件......

 $(this).ready(function() {
        $("#downloadBtn").click(function() {
            var formdata= $("#formId").serialize();
            window.location="download.action?"+formdata;
        });
    });