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

Класс TemporaryUploadedFile

Класс TemporaryUploadedFile наследуется от UploadedFile и используется Django для представления файлов, загруженных через формы, когда размер файла превышает настройку FILE_UPLOAD_MAX_MEMORY_SIZE. В отличие от InMemoryUploadedFile, этот класс хранит содержимое файла во временной директории на диске, а не в оперативной памяти. Основные параметры: UploadedFile/attribute/name/">name - имя файла, size - размер в байтах, UploadedFile/attribute/content_type/">content_type - MIME-тип, а также temporary_file_path - путь к временному файлу. Класс предоставляет методы для чтения содержимого по частям и закрытия файла после обработки.

Синтаксис

class TemporaryUploadedFile(name, size, content_type, charset, content_extra_headers)

Параметры конструктора:

name # Имя загруженного файла (строка) size # Размер файла в байтах (целое число) content_type # MIME-тип файла (строка) charset # Кодировка (строка, опционально) content_extra_headers # Дополнительные заголовки (словарь, опционально)

Пример

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

from django.shortcuts import render from django.http import HttpResponse def upload_view(request): if request.method == 'POST': uploaded_file = request.FILES['file'] # Проверяем, является ли файл временным if hasattr(uploaded_file, 'temporary_file_path'): print("File is stored temporarily on disk") print(f"Temporary path: {uploaded_file.temporary_file_path()}") # Читаем содержимое файла по частям content = b'' for chunk in uploaded_file.chunks(): content += chunk return HttpResponse(f"File size: {uploaded_file.size} bytes") return render(request, 'upload.html')

Пример

Принудительное использование временного хранения с помощью настройки в проекте:

# settings.py FILE_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 # 1 MB FILE_UPLOAD_TEMP_DIR = '/tmp/uploads/' # Кастомная директория # views.py from django.core.files.uploadedfile import TemporaryUploadedFile def handle_large_file(request): if request.method == 'POST': file_obj = request.FILES.get('large_file') if isinstance(file_obj, TemporaryUploadedFile): # Файл хранится на диске print(f"Temporary file path: {file_obj.temporary_file_path()}") print(f"File name: {file_obj.name}") print(f"Content type: {file_obj.content_type}") # Сохраняем файл в нужное место with open('final_file.dat', 'wb') as destination: for chunk in file_obj.chunks(): destination.write(chunk) return HttpResponse("File processed successfully")

Результат выполнения кода:

"Temporary file path: /tmp/uploads/tmpfile_abcdef" "File name: document.pdf" "Content type: application/pdf"

Пример

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

from django.core.files.uploadedfile import TemporaryUploadedFile, InMemoryUploadedFile def process_file(request): if request.method == 'POST': file = request.FILES['attachment'] if isinstance(file, TemporaryUploadedFile): print("Large file: processing using file system") path = file.temporary_file_path() with open(path, 'rb') as f: data = f.read(1024) # Читаем первые 1024 байта elif isinstance(file, InMemoryUploadedFile): print("Small file: processing in memory") data = file.read() print(f"File size: {file.size} bytes") print(f"File name: {file.name}") return HttpResponse("File processed")

Результат выполнения кода:

"Large file: processing using file system" "File size: 5242880 bytes" "File name: video.mp4"

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

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