Загрузка файлов в Django (request.FILES)

HELP-ME-24.COM (Freelance Team), Черноусов Антон
Продолжаем изучать Django и сегодня мы научимся загружать файлы на сервер. Методы прямой работы с request.FILES редко рассматриваются и мы попробуем восполнить этот пробел.

Для загрузки небольших файлов (ограниченных лимитом на объем передаваемых данных методом POST) можно использовать стандартный элемент HTML-формы:

<input type="file" name="upload_files" placeholder="Загрузить файл ..." multiple />

В общем виде форма предполагающая загрузку файла в виде части Django-шаблона будет выглядеть следующим образом:

<form method="post" action="/file-manager/" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="upload_files" placeholder="Загрузить файл ..." multiple />
<input type="submit" value="Загрузить файлы" />
</form>

В этом примере стоит обратить внимание на тип кодирования передаваемых формой данных multipart/form-data, этот тип обязательно должен быть установлен если предполагается загрузка файлов на сервер.

Для обработки загрузки файлов (а используя параметр multiple мы разрешаем именно множественную загрузку файлов) используется примерно такая конструкция:

# Загрузить файлы
if 'upload_file' in request.POST:
for uploaded_file in request.FILES.getlist('upload_files'):
with default_storage.open('tmp/' + str(uploaded_file), 'wb+') as destination:
for chunk in uploaded_file.chunks():
destination.write(chunk)

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

from django.core.files.storage import default_storage

Обратите внимание, что при помощи default_storage можно писать только в каталог определенный параметром конфигурации MEDIA.

Оставьте комментарий

Вы должны быть вошедший в чтобы отправить комментарий