Функция для создания 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

Вы думаете, correct-elegant-pythonic достаточно? Какой-либо лучший способ сделать это?

Спасибо!

6
задан nabucosound 9 March 2010 в 18:28
поделиться

2 ответа

Для StringIO обычно следует использовать o.getvalue () для получения результата. Кроме того, если вы хотите добавить обычный файл в zip-файл, вы можете использовать zf.write ('picture.jpg') . Вам не нужно читать его вручную.

12
ответ дан 8 December 2019 в 14:42
поделиться

Избегание дисковых файлов может замедлить работу вашего сервера, но это, конечно, сработает.

Вы исчерпаете память, если будете обслуживать слишком много таких запросов одновременно.

4
ответ дан 8 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: