我在django中将请求作为附件发送时遇到问题 . 我的应用程序将一些数据写入文件并对其进行拉链 . 但是,当我返回附件响应时,浏览器会下载它,但zip文件已损坏 . (原始zip包含我的文件,不会出现任何错误 . )
我的代码在这里:
file_path = "/root/Programs/media/statics/schedules/"
zip_file_name = file_path + "test.zip"
zip_file = zipfile.ZipFile(zip_file_name, "w")
for i in range(len(planner_list)):
file_name = file_path + str(planner_list[i][0].start_date)
render_to_file('deneme.html',file_name ,{'schedule':schedule})
zip_file.write(file_name, os.path.basename(file_name),zipfile.ZIP_DEFLATED)
os.remove(file_name)
zip_file.close()
response = HttpResponse(file_path , content_type='application/zip')
response['Content-Disposition'] = 'attachment; filename=test.zip'
return response
1 回答
HttpResponse接受一个返回字符串的字符串或迭代器(就像一个类似打开文件的对象) . 您正在传递文件路径,因此响应包含一个文件,其内容只是文件路径而不是您写入文件的有效zip内容 . 您可以使用
open
,因为HTTPResponse
对象将为您关闭文件:引用文档:
在每个请求上写入磁盘可能会损害您的服务器I / O - 查看您的代码,一切看起来都足够小以适应内存 . 您可以使用(C)StringIO(Python3中的BytesIO)而不是真实文件: