Standard Sizes
Существует три варианта стандартных размеров FAB
(согласно developer.android ), которые можно установить с помощью app:fabSize
.
.
.
Custom Sizes
Чтобы установить нестандартный размер FAB
, вы можете установить app:fabCustomSize
. Обратите внимание, что android:layout_width
и android:layout_height
должны быть "wrap_content"
.
Позволяет ли используемая вами zip-библиотека выводить данные в поток. Вы можете выполнять потоковую передачу напрямую пользователю вместо временной записи в zip-файл, ЗАТЕМ потоковую передачу пользователю.
Вот простая функция просмотра Django, которая архивирует (в качестве примера) все читаемые файлы в / tmp
и возвращает zip-файл.
from django.http import HttpResponse
import zipfile
import os
from cStringIO import StringIO # caveats for Python 3.0 apply
def somezip(request):
file = StringIO()
zf = zipfile.ZipFile(file, mode='w', compression=zipfile.ZIP_DEFLATED)
for fn in os.listdir("/tmp"):
path = os.path.join("/tmp", fn)
if os.path.isfile(path):
try:
zf.write(path)
except IOError:
pass
zf.close()
response = HttpResponse(file.getvalue(), mimetype="application/zip")
response['Content-Disposition'] = 'attachment; filename=yourfiles.zip'
return response
Конечно, этот подход будет работает только в том случае, если zip-файлы удобно помещаются в память - в противном случае вам придется использовать файл на диске (чего вы пытаетесь избежать). В этом случае вы просто замените file = StringIO ()
на file = open ('/ path / to / yourfiles.zip', 'wb')
и замените file.getvalue ()
с кодом для чтения содержимого файла на диске.
Можно передать итератор конструктору HttpResponse (см. Документацию) . Это позволит вам создать собственный итератор, который генерирует данные по мере их запроса. Однако я не думаю, что это сработает с zip (вам придется отправлять частичный zip по мере его создания).
Я думаю, что правильным способом было бы создать файлы в автономном режиме, в отдельном процессе. Затем пользователь может отслеживать прогресс, а затем загрузить файл, когда он будет готов (возможно, используя метод итератора, описанный выше). Это похоже на то, что используют такие сайты, как YouTube, когда вы загружаете файл и ждете его обработки.