РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
635 of 818 menu

Класс UploadedFile

Класс UploadedFile используется в Django для представления файлов, загруженных через формы. Он расширяет базовый класс File и добавляет специфическую для загруженных файлов функциональность. Объекты этого класса автоматически создаются Django при обработке загруженных файлов в запросе и передаются в представления через request.FILES. Класс предоставляет доступ к содержимому файла, его имени, размеру и MIME-типу, а также методы для чтения и обработки данных.

Синтаксис

# Получение объекта UploadedFile из request.FILES uploaded_file = request.FILES['field_name'] # Пример использования в представлении def handle_uploaded_file(request): if request.method == 'POST': file = request.FILES['document'] # Работа с файлом

Основные атрибуты

Класс UploadedFile предоставляет следующие основные атрибуты для доступа к метаданным файла:

file = request.FILES['document'] # Имя файла file_name = file.name # Размер файла в байтах file_size = file.size # MIME-тип файла content_type = file.content_type # Кодировка файла (если передана) charset = file.charset

Метод read

Метод read используется для чтения содержимого файла. Он возвращает байтовую строку с данными файла:

from django.shortcuts import render from django.http import HttpResponse def upload_view(request): if request.method == 'POST' and request.FILES.get('document'): file = request.FILES['document'] # Чтение всего файла content = file.read() # Чтение первых 100 байт first_bytes = file.read(100) return HttpResponse(f"File size: {len(content)} bytes") return render(request, 'upload.html')

Метод chunks

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

from django.core.files.storage import default_storage def save_large_file(request): if request.method == 'POST' and request.FILES.get('large_file'): uploaded_file = request.FILES['large_file'] # Сохранение файла по частям path = default_storage.save(uploaded_file.name, uploaded_file) # Обработка содержимого по частям for chunk in uploaded_file.chunks(): # Обработка каждой части файла process_chunk(chunk) return HttpResponse("File processed successfully")

Метод multiple_chunks

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

from django.shortcuts import render from django.http import HttpResponse def check_file_size(request): if request.method == 'POST' and request.FILES.get('file'): uploaded_file = request.FILES['file'] if uploaded_file.multiple_chunks(): # Файл большой, используем chunks for chunk in uploaded_file.chunks(): process_chunk(chunk) return HttpResponse("Large file processed in chunks") else: # Файл маленький, читаем целиком content = uploaded_file.read() return HttpResponse(f"Small file processed: {len(content)} bytes") return render(request, 'upload.html')

Пример . Использование в форме

Полный пример обработки загруженного файла с использованием класса UploadedFile в форме:

from django.shortcuts import render, redirect from django.http import HttpResponse from django.core.files.storage import default_storage from django.core.files.base import ContentFile def upload_file(request): if request.method == 'POST' and request.FILES.get('file_field'): file = request.FILES['file_field'] # Проверка размера файла if file.size > 5 * 1024 * 1024: # 5 MB return HttpResponse("File too large") # Получение имени и типа файла file_name = file.name content_type = file.content_type # Сохранение файла saved_path = default_storage.save( f'uploads/{file_name}', ContentFile(file.read()) ) return HttpResponse(f"File '{file_name}' uploaded successfully") return render(request, 'upload_form.html')

Результат выполнения при успешной загрузке:

"File 'document.pdf' uploaded successfully"

Пример . Обработка нескольких файлов

Класс UploadedFile позволяет обрабатывать несколько файлов, загруженных одновременно:

from django.shortcuts import render from django.http import HttpResponse def upload_multiple(request): if request.method == 'POST': files = request.FILES.getlist('documents') file_info = [] for uploaded_file in files: info = { 'name': uploaded_file.name, 'size': uploaded_file.size, 'type': uploaded_file.content_type, } # Обработка каждого файла if uploaded_file.multiple_chunks(): # Используем chunks для больших файлов chunk_count = 0 for chunk in uploaded_file.chunks(): chunk_count += 1 info['chunks'] = chunk_count else: content = uploaded_file.read() info['content_length'] = len(content) file_info.append(info) return render(request, 'file_list.html', {'files': file_info}) return render(request, 'upload_multiple.html')

Смотрите также

  • класс File,
    базовый класс для работы с файлами в Django
  • атрибут name,
    имя загруженного файла
  • атрибут size,
    размер загруженного файла
  • атрибут content_type,
    MIME-тип загруженного файла
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить