我尝试在Django应用程序中下载一个zip文件。
我应该如何从视图中返回它?
我尝试了下面的代码,但是我在浏览器中得到了一些警报,其中包含我的zip文件内容。
我做错了什么?
def download_logs(request):
date = datetime.datetime.now().__str__().replace(" ", "_").split(".")[0]
os.system("df -h . > /tmp/disk_space")
response = HttpResponse(mimetype='application/zip')
response['Content-Disposition'] = 'filename=logs_%s.zip' % date
files = []
files.append("/tmp/disk_space")
buffer = StringIO()
zip = zipfile.ZipFile(buffer, "w", zipfile.ZIP_DEFLATED)
for name in files:
file = open(name, "r")
zip.writestr(name, file.read())
file.close()
zip.close()
buffer.flush()
ret_zip = buffer.getvalue()
buffer.close()
response.write(ret_zip)
return response
答案 0 :(得分:3)
您应该告诉浏览器将响应视为文件附件。
从docs开始,您应该执行以下操作:
>> response = HttpResponse(my_data, mimetype='application/vnd.ms-excel')
>>> response['Content-Disposition'] = 'attachment; filename=foo.xls'
答案 1 :(得分:2)
以下是实际工作代码的链接,用于在内存中构建Zip文件并将其作为要下载的文件返回给用户:django-rosetta's view.py