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

Класс BinaryFileResponse

Класс BinaryFileResponse расширяет класс Response и используется для отправки файлов клиенту. Первым параметром в конструктор передаётся путь к файлу. Вторым параметром можно указать статус-код ответа, третьим - массив HTTP-заголовков, четвёртым - нужно ли удалять файл после отправки. В отличие от обычного Response, данный класс не загружает содержимое файла в память целиком, а отдаёт его потоком, что экономит ресурсы сервера при работе с большими файлами.

Синтаксис

<?php use Symfony\Component\HttpFoundation\BinaryFileResponse; $response = new BinaryFileResponse( string $file, int $status = 200, array $headers = [], bool $deleteFileAfterSend = false ); ?>

Пример

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

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\BinaryFileResponse; use Symfony\Component\Routing\Attribute\Route; class FileController extends AbstractController { #[Route('/file', name: 'file_show')] public function show(): BinaryFileResponse { return new BinaryFileResponse('/path/to/image.png'); } } ?>

При обращении к адресу /file браузер получит файл image.png с заголовком Content-Type, определённым автоматически по расширению.

Пример

Давайте отдадим файл, который нужно удалить после отправки. Это удобно для временных файлов, например сгенерированных отчётов:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\BinaryFileResponse; use Symfony\Component\Routing\Attribute\Route; class FileController extends AbstractController { #[Route('/report', name: 'file_report')] public function report(): BinaryFileResponse { $file = '/tmp/report.pdf'; $response = new BinaryFileResponse($file, 200, [], true); $response->deleteFileAfterSend(true); return $response; } } ?>

После того как файл будет полностью отдан клиенту, Symfony автоматически удалит его с диска.

Пример

Давайте зададим собственное имя файла, которое увидит пользователь при скачивании, с помощью метода setContentDisposition:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\BinaryFileResponse; use Symfony\Component\HttpFoundation\ResponseHeaderBag; use Symfony\Component\Routing\Attribute\Route; class FileController extends AbstractController { #[Route('/download', name: 'file_download')] public function download(): BinaryFileResponse { $response = new BinaryFileResponse('/path/to/article.pdf'); $response->setContentDisposition( ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'article.pdf' ); return $response; } } ?>

Браузер предложит пользователю сохранить файл под именем article.pdf вместо открытия его в окне просмотра.

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

  • класс Response,
    который является базовым классом для всех HTTP-ответов
  • метод setContentDisposition,
    который задаёт имя файла и способ его отображения
  • метод deleteFileAfterSend,
    который удаляет файл после отправки клиенту
  • класс StreamedResponse,
    который отдаёт данные потоком без буферизации
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить