Я избегаю создания файлов на диске, это - то, что я имею до сих пор:
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
Вы думаете, correct-elegant-pythonic достаточно? Какой-либо лучший способ сделать это?
Спасибо!
Для StringIO
обычно следует использовать o.getvalue ()
для получения результата. Кроме того, если вы хотите добавить обычный файл в zip-файл, вы можете использовать zf.write ('picture.jpg')
. Вам не нужно читать его вручную.
Избегание дисковых файлов может замедлить работу вашего сервера, но это, конечно, сработает.
Вы исчерпаете память, если будете обслуживать слишком много таких запросов одновременно.