创建内存中的zip文件并作为HTTP响应返回的函数
我在尽量避免在硬盘上创建文件,这是我目前的做法:
def get_zip(request):
import zipfile, StringIO
i = open('picture.jpg', 'rb').read()
o = StringIO.StringIO()
zf = zipfile.ZipFile(o, mode='w')
zf.writestr('picture.jpg', i)
zf.close()
o.seek(0)
response = HttpResponse(o.read())
o.close()
response['Content-Type'] = 'application/octet-stream'
response['Content-Disposition'] = "attachment; filename=\"picture.zip\""
return response
你觉得这样做正确吗?够优雅、符合Python的风格吗?有没有更好的方法呢?
谢谢!
2 个回答
4
如果不使用磁盘文件,你的服务器可能会变得非常慢,但这样做肯定是可行的。
如果同时处理太多这样的请求,你的内存会被用光。
12
对于 StringIO
,一般来说,你应该使用 o.getvalue()
来获取结果。另外,如果你想把一个普通文件添加到压缩文件中,可以用 zf.write('picture.jpg')
。你不需要手动去读取这个文件。