我需要下载通过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文件路径。我该怎么做?
答案 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;
});
});