我避免在磁盘上创建文件,这是我到目前为止所做的:
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
你认为正确 - 优雅 - pythonic足够吗?有没有更好的方法呢?
谢谢!
答案 0 :(得分:12)
对于StringIO
,您通常应使用o.getvalue()
来获取结果。此外,如果要将普通文件添加到zip文件,可以使用zf.write('picture.jpg')
。您无需手动阅读它。
答案 1 :(得分:4)
避免使用磁盘文件可能会使服务器变慢,但它肯定会有效。
如果你同时提供太多这些请求,你就会耗尽内存。