[Django] файлы блога технологии скачано достижения

Команда разработчиков в процессе развития, неизбежно будет сталкиваться с некоторыми трудностями и проблемами, но они в конечном итоге найти способ преодолеть. Мы считаем, что этот опыт необходимо записать, так что есть [техническая] блог.


Джанго файлов, загруженных достичь

1. Общие сведения

В проекте VisualPytorch была необходимость обеспечить функцию загрузки файла. Сначала я думаю, что есть три вида программ

  • Непосредственно на первой странице строки в файл, завершение клиента.

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

  • На сервере, чтобы открыть серверную систему передачи файлов для предоставления услуг файлов.

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

  • Создание на сервере файлов непосредственно основной каталог, после передачи через пакет в виде HTTP потока

И в конечном счете, примененный метод, сравнительно просто и легко осуществить.

2, Джанго бэкенд файл упаковывается с загрузкой

О тюка файла, используйте пакет питона ZipFile при реализации этого

zipf = zipfile.ZipFile("project_VisualPytorch.zip", 'w',zipfile.ZIP_DEFLATED)

Для получения дополнительной информации об использовании ZipFile найти https://docs.python.org/3/library/zipfile.html

Фон сервер через объект ответа НТТР, выполненный с возможностью передавать данные на передний конец, для передачи больших файлов, рекомендуется использовать StreamingHttpResponse или конфигурацию кадра FileResponse Django объект ответ.

StreamingHttpResponse с использованием потоковых файлов, параметр итератора, передача фрагментации файлов, для достижения следующего

response = StreamingHttpResponse(file_iterator("project_VisualPytorch.zip"))
response['Content-Type'] = 'application/zip'
response['Content-Disposition'] = 'attachment;filename="project_VisualPytorch.zip"'
return response

Строительство итератора следующим образом

def file_iterator(file_name, chunk_size=512):
    with open(file_name, 'rb') as f:
        while True:
            c = f.read(chunk_size)
            if c:
                yield c
            else:
                break

При этом размер фрагмента 512 предусмотрен.

FileResponse подкласс StreamingHttpResponse с использованием методов кэширования, в некоторых случаях лучше, чем родительский класс.

рекомендация

отwww.cnblogs.com/1606-huluwa/p/10990956.html