Генерация файла для загрузки Django

Выберите «Извлечь строки из отношения с некоторым условием», а «Проект» извлечет определенное количество атрибута / столбца из отношения с некоторым условием или без него.

95
задан Josh Hunt 25 May 2009 в 22:26
поделиться

3 ответа

Чтобы инициировать загрузку, вам нужно установить заголовок Content-Disposition :

from django.http import HttpResponse
from wsgiref.util import FileWrapper

# generate the file
response = HttpResponse(FileWrapper(myfile.getvalue()), content_type='application/zip')
response['Content-Disposition'] = 'attachment; filename=myfile.zip'
return response

Если вы не хотите, чтобы файл на диске, вам нужно использовать StringIO

import cStringIO as StringIO

myfile = StringIO.StringIO()
while not_finished:
    # generate chunk
    myfile.write(chunk)

При желании вы также можете установить заголовок Content-Length :

response['Content-Length'] = myfile.tell()
111
ответ дан 24 November 2019 в 05:50
поделиться

Да, вы можете использовать модуль zipfile , модуль zlib или другие модули сжатия для создания zip-архива в памяти . Вы можете заставить ваше представление записывать zip-архив в объект HttpResponse , который возвращает представление Django, вместо отправки контекста в шаблон. Наконец, вам необходимо установить для параметра mimetype соответствующий формат, чтобы указать браузеру обрабатывать ответ как файл .

9
ответ дан 24 November 2019 в 05:50
поделиться

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

Однако вы можете записать в объект StringIO .

>>> import zipfile
>>> import StringIO
>>> buffer= StringIO.StringIO()
>>> z= zipfile.ZipFile( buffer, "w" )
>>> z.write( "idletest" )
>>> z.close()
>>> len(buffer.getvalue())
778

Буфер " "объект похож на файл с ZIP-архивом 778 байт.

26
ответ дан 24 November 2019 в 05:50
поделиться
Другие вопросы по тегам:

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