如何使用 jQuery ajax 在 web2py 中下载 (zip) 文件
How to download (zip) file in web2py with jQuery ajax
在'download_data'中写入了一个zip文件,返回时没有错误或下载响应。
备注:
函数返回的打印数据似乎是压缩文件数据
我没有增加或使用download.stream或response.download,不知道在这种情况下是否有必要
请指出以下 ajax 调用 and/or 控制器函数生成 zip 文件下载时缺少的内容。
jQuery.ajax({method:'get',url:'{{=URL('download_data')}}',
data:fileIDs,
success: function(){}
});
# function in web2py controller
def download_data():
import zipfile
import cStringIO
import contenttype as c
vars = request.vars
tempfile = cStringIO.StringIO()
temparchive = zipfile.ZipFile(tempfile, 'w', zipfile.ZIP_DEFLATED)
fileIDs = vars.values()
try:
for file_id in fileIDs:
file = db.files[file_id].file
fileLoc = db.files.file.retrieve_file_properties(file)['path'] + '/' + file
temparchive.writestr(db.files[file_id].file_name, open(fileLoc, 'rb').read())
finally:
temparchive.close() #writes
response.headers['Content-Disposition'] = 'attachment;filename=files.zip'
response.headers['Content-Type'] = 'application/zip'
rtn = tempfile.getvalue()
tempfile.close()
return rtn
从技术上讲,ajax 请求无法触发下载。您必须将 window.location 设置为文件的 URL(在 web2py 中,这是 returns 文件数据的控制器函数的 URL),或者依赖 'currently dubious' html5.
下载规范
有关详细信息,请参阅 Download a file from Servlet using Ajax, and for the web2py origin of this question: https://groups.google.com/forum/#!topic/web2py/nJY9FSyNggo
在'download_data'中写入了一个zip文件,返回时没有错误或下载响应。
备注:
函数返回的打印数据似乎是压缩文件数据
我没有增加或使用download.stream或response.download,不知道在这种情况下是否有必要
请指出以下 ajax 调用 and/or 控制器函数生成 zip 文件下载时缺少的内容。
jQuery.ajax({method:'get',url:'{{=URL('download_data')}}',
data:fileIDs,
success: function(){}
});
# function in web2py controller
def download_data():
import zipfile
import cStringIO
import contenttype as c
vars = request.vars
tempfile = cStringIO.StringIO()
temparchive = zipfile.ZipFile(tempfile, 'w', zipfile.ZIP_DEFLATED)
fileIDs = vars.values()
try:
for file_id in fileIDs:
file = db.files[file_id].file
fileLoc = db.files.file.retrieve_file_properties(file)['path'] + '/' + file
temparchive.writestr(db.files[file_id].file_name, open(fileLoc, 'rb').read())
finally:
temparchive.close() #writes
response.headers['Content-Disposition'] = 'attachment;filename=files.zip'
response.headers['Content-Type'] = 'application/zip'
rtn = tempfile.getvalue()
tempfile.close()
return rtn
从技术上讲,ajax 请求无法触发下载。您必须将 window.location 设置为文件的 URL(在 web2py 中,这是 returns 文件数据的控制器函数的 URL),或者依赖 'currently dubious' html5.
下载规范有关详细信息,请参阅 Download a file from Servlet using Ajax, and for the web2py origin of this question: https://groups.google.com/forum/#!topic/web2py/nJY9FSyNggo