Класс FileResponse

Класс FileResponse наследуется от StreamingHttpResponse и предназначен для эффективной отдачи файлов клиенту. Он автоматически устанавливает правильные заголовки Content-Type и Content-Disposition на основе переданного файла. В отличие от стандартного HttpResponse, который загружает весь файл в память, FileResponse читает файл по частям, что делает его оптимальным выбором для больших файлов. Класс принимает файлоподобный объект в качестве первого аргумента и поддерживает параметры для управления размером буфера и заголовками ответа.

Синтаксис

pythonfrom django.http import FileResponse

FileResponse(file, as_attachment=False, filename='', **kwargs)

Пример

Давайте создадим простой ответ с файлом изображения:

pythonfrom django.http import FileResponse
from django.shortcuts import render

def download_image(request):
    file_path = 'media/images/photo.jpg'
    file = open(file_path, 'rb')
    return FileResponse(file)

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

python"File sent successfully"

Пример

Давайте отправим файл для скачивания с указанием имени:

pythonfrom django.http import FileResponse
from django.shortcuts import render

def download_document(request):
    file_path = 'media/documents/report.pdf'
    file = open(file_path, 'rb')
    return FileResponse(file, as_attachment=True, filename='report_2026.pdf')

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

python"Document downloaded"

Пример

Давайте используем FileResponse для отдачи файла из модели с полем FileField:

pythonfrom django.http import FileResponse
from django.shortcuts import get_object_or_404
from .models import Document

def download_document(request, doc_id):
    doc = get_object_or_404(Document, id=doc_id)
    return FileResponse(doc.file.open(), as_attachment=True, filename=doc.file.name)

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

python"File sent"

Пример

Давайте создадим представление для отдачи файла с пользовательским типом содержимого:

pythonfrom django.http import FileResponse
from django.shortcuts import render

def download_video(request):
    file_path = 'media/videos/tutorial.mp4'
    file = open(file_path, 'rb')
    response = FileResponse(file, content_type='video/mp4')
    response['Content-Disposition'] = 'inline; filename="tutorial.mp4"'
    return response

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

python"Video streamed"

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

  • класс HttpResponse,
    который представляет стандартный HTTP-ответ
  • класс JsonResponse,
    который возвращает данные в формате JSON
  • класс StreamingHttpResponse,
    который используется для потоковой передачи данных
  • класс HttpResponseRedirect,
    который выполняет перенаправление на другой URL