Загруженные файлы и менеджеры закачки ¶
Загруженные файлы ¶
-
класс
UploadedFile
¶
Во время загрузки файлов фактические данные файла сохраняются в формате request.FILES
. Каждый элемент этого словаря - это объект UploadedFile
(или подкласс), адаптер для загруженного файла. Обычно для доступа к загруженному контенту используется один из этих методов:
-
UploadedFile.
read
() ¶ Читает все данные из загруженного файла. Будьте осторожны с этим методом: если затронутый файл очень большой, он может превысить емкость вашей системы, если вы попытаетесь прочитать его в память. Скорее его рекомендуется использовать
chunks()
, см. Ниже.
-
UploadedFile.
multiple_chunks
( chunk_size = Нет ) ¶ Возвращает
True
, является ли загруженный файл достаточно большим, чтобы его можно было прочитать в нескольких сегментах. По умолчанию это влияет на все файлы размером более 2,5 мегабайт, но это можно настроить; увидеть ниже.
-
UploadedFile.
chunks
( chunk_size = Нет ) ¶ Генератор, возвращающий сегменты файла. Если
multiple_chunks()
стоитTrue
, рекомендуется использовать этот метод с циклом вместо использованияread()
.На практике всегда проще использовать
chunks()
. Выполняя циклchunks()
вместо вызоваread()
, можно гарантировать, что большие файлы не перегружают системную память.
Вот несколько полезных атрибутов UploadedFile
:
-
UploadedFile.
name
¶ Имя загруженного файла (например
mon_fichier.txt
).
-
UploadedFile.
size
¶ Размер загруженного файла в байтах.
-
UploadedFile.
content_type
¶ Заголовок,
content-type
связанный с загруженным файлом (например, text / plain или application / pdf ). Как и все данные, поступающие от пользователя, мы не можем быть уверены, что файл действительно относится к этому типу. Всегда необходимо проверять, соответствует ли содержимое файла типу содержимого, заявленному в заголовке: «доверяй, но контролируй».
-
UploadedFile.
content_type_extra
¶ Словарь, содержащий дополнительные параметры, передаваемые в заголовок
content-type
. Обычно они предоставляются такими службами, как Google App Engine, которые перехватывают и обрабатывают загрузки файлов за вас. Следовательно, ваш менеджер может получать не содержимое загруженного файла, а скорее URL-адрес или другой указатель на файл (см.RFC 2388 ).
-
UploadedFile.
charset
¶ Для типов содержимого text / * - кодировка символов (например
utf8
), заданная браузером. Опять же, «доверие, но контроль» - самая мудрая стратегия здесь.
Заметка
Как и в случае с обычными файлами Python, вы можете читать файл построчно, просматривая загруженный файл:
for line in uploadedfile:
do_something_with(line)
Строки разделяются с помощью универсальные символы новой строки . Следующее считается окончанием строки: соглашение'\n'
оконце строки в Unix, соглашениеWindows'\r\n'
и старое соглашение Macintosh'\r'
.
Среди подклассов UploadedFile
мы находим:
-
класс
TemporaryUploadedFile
¶ Файл, загруженный во временное расположение (т. Е. Потоковая передача на диск). Этот класс используется
TemporaryFileUploadHandler
. Помимо методовUploadedFile
, у него есть дополнительный метод:
-
TemporaryUploadedFile.
temporary_file_path
() ¶ Возвращает полный путь к временному загруженному файлу.
-
класс
InMemoryUploadedFile
¶ Файл, загруженный в память (т. Е. Потоковая передача в память). Этот класс используется
MemoryFileUploadHandler
.
Интегрированные менеджеры загрузки ¶
Вместе MemoryFileUploadHandler
и TemporaryFileUploadHandler
определите поведение загрузки файлов Django по умолчанию, помещая небольшие файлы в память, а большие - на диск. Они внутри django.core.files.uploadhandler
.
-
класс
MemoryFileUploadHandler
¶
Диспетчер загрузки файлов для потоковой загрузки в память (используется для небольших файлов).
-
класс
TemporaryFileUploadHandler
¶
Менеджер загрузки, который передает данные во временный файл, используя TemporaryUploadedFile
.
Написание пользовательских обработчиков загрузки ¶
-
класс
FileUploadHandler
¶
Все менеджеры загрузки файлов должны наследовать от django.core.files.uploadhandler.FileUploadHandler
. Их можно разместить где угодно.
Обязательные методы ¶
Настраиваемые менеджеры загрузки должны определять следующие методы:
-
FileUploadHandler.
receive_data_chunk
( raw_data , начало ) ¶ Получает «сегмент» данных из загруженного файла.
raw_data
это строка байтов, содержащая отправленные данные.start
- позиция в файле, соответствующая началу этого сегментаraw_data
.Возвращаемые вами данные будут переданы обратно
receive_data_chunk
в следующие методы обработчика загрузки. Таким образом, менеджер может быть «фильтром» для других менеджеров.Resend
None
Сreceive_data_chunk
предотвратить оставшиеся Загрузить Обработчик от приема этого сегмента. Это может быть полезно, если вы сами храните полученные данные и не хотите, чтобы последующие менеджеры сохраняли копию данных.Если вы генерируете исключение
StopUpload
илиSkipFile
, загрузка зависает или файл полностью пропускается.
-
FileUploadHandler.
file_complete
( размер_файла ) ¶ Вызывается, когда загрузка файла завершена.
Обработчик должен вернуть объект,
UploadedFile
который будет храниться вrequest.FILES
. Обработчики также могут возвращаться,None
чтобы указать, что объектUploadedFile
должен поступить от одного из следующих обработчиков загрузки.
Необязательные методы ¶
Менеджеры загрузки также могут установить один из следующих дополнительных методов или атрибутов:
-
FileUploadHandler.
chunk_size
¶ Размер в байтах сегментов, которые Django хранит в памяти и передает обработчику. Проще говоря, этот атрибут управляет размером сегментов, в которые отправляются
FileUploadHandler.receive_data_chunk
.Для оптимальной производительности размер сегмента должен делиться на
4
2 гига (2 31 байт), но не превышать его . Когда разные размеры сегментов указываются разными обработчиками, Django использует наименьший из них размер сегмента.По умолчанию 64 * 2 10 байтов или 64 КБ.
-
FileUploadHandler.
new_file
( имя_поля , имя_файла , тип_содержимого , длина_содержимого , кодировка , тип_содержимого_экстра ) ¶ Функция напоминания, указывающая, что начинается отправка нового файла. Он вызывается до того, как данные будут отправлены в диспетчер загрузки.
field_name
это имя (строка) поля файла<input>
.file_name
- это имя файла, указанное браузером.content_type
- это, например, тип MIME, указанный браузером'image/jpeg'
.content_length
- размер изображения, указанный браузером. Иногда это значение не указывается и содержитNone
.charset
набор символов (напримерutf8
), указанный браузером. Молcontent_length
, иногда это значение не указывается.content_type_extra
содержит дополнительную информацию о файле согласно заголовкуcontent-type
. СмотритеUploadedFile.content_type_extra
.Этот метод может генерировать исключение,
StopFutureHandlers
чтобы другие менеджеры не могли обрабатывать этот файл после этого.
-
FileUploadHandler.
upload_complete
() ¶ Функция напоминания, указывающая, что вся загрузка завершена (все файлы).
-
FileUploadHandler.
handle_raw_input
( входные_данные , МЕТА , длина_содержимого , граница , кодировка ) ¶ Позволяет обработчику полностью отменять синтаксический анализ необработанного ввода HTTP.
input_data
- объект типа файла, который поддерживает read (read()
).META
тот же объект, что иrequest.META
.content_length
это размер данных вinput_data
. Не читать большеcontent_length
байтов изinput_data
.boundary
это граница MIME этого запроса.encoding
кодировка этого запроса.Верните,
None
если вы хотите, чтобы обработка загрузки продолжалась, или кортеж, если вы хотите вернуть новые готовые структуры данных непосредственно из запроса.(POST, FILES)