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

Класс BinaryFileResponse

Класс BinaryFileResponse предназначен для отправки бинарных файлов в ответе HTTP. Он расширяет класс Response и добавляет специфическую функциональность для работы с файлами, такие как управление заголовками, поддержка частичной загрузки (range requests) и отправка файлов на скачивание. Первым параметром конструктора передаётся путь к файлу в виде строки или объекта SplFileInfo. Вторым параметром можно указать HTTP-статус ответа, по умолчанию 200. Третьим параметром передаются дополнительные заголовки в виде массива. Четвертый параметр определяет, следует ли автоматически удалять файл после отправки (по умолчанию false). Пятый параметр позволяет явно указать MIME-тип файла.

Синтаксис

<?php new BinaryFileResponse( string|SplFileInfo $file, int $status = 200, array $headers = [], bool $deleteFileAfterSend = false, ?string $mimeType = null ); ?>

Пример

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

<?php namespace App\Http\Controllers; use Symfony\Component\HttpFoundation\BinaryFileResponse; class ImageController extends Controller { public function show(string $filename): BinaryFileResponse { $path = storage_path('app/images/' . $filename); return new BinaryFileResponse($path); } } ?>

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

"BinaryFileResponse object with image data"

Пример

Давайте отправим файл со статусом 200 и дополнительными заголовками:

<?php namespace App\Http\Controllers; use Symfony\Component\HttpFoundation\BinaryFileResponse; class FileController extends Controller { public function download(string $filename): BinaryFileResponse { $path = public_path('uploads/' . $filename); $headers = [ 'Content-Type' => 'application/pdf', 'X-Custom-Header' => 'CustomValue', ]; return new BinaryFileResponse($path, 200, $headers); } } ?>

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

"BinaryFileResponse with custom headers"

Пример

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

<?php namespace App\Http\Controllers; use Symfony\Component\HttpFoundation\BinaryFileResponse; class TempFileController extends Controller { public function serveTemporaryFile(): BinaryFileResponse { $tempPath = storage_path('app/temp/temp_file.txt'); $deleteAfterSend = true; return new BinaryFileResponse($tempPath, 200, [], $deleteAfterSend); } } ?>

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

"BinaryFileResponse will delete file after sending"

Пример

Давайте используем объект SplFileInfo и укажем явный MIME-тип:

<?php namespace App\Http\Controllers; use Symfony\Component\HttpFoundation\BinaryFileResponse; use SplFileInfo; class DocumentController extends Controller { public function showDocument(): BinaryFileResponse { $file = new SplFileInfo(storage_path('app/documents/document.docx')); $mimeType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'; return new BinaryFileResponse($file, 200, [], false, $mimeType); } } ?>

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

"BinaryFileResponse with explicit MIME type"

Пример

Давайте обработаем ошибку, если файл не найден:

<?php namespace App\Http\Controllers; use Symfony\Component\HttpFoundation\BinaryFileResponse; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class SafeFileController extends Controller { public function safeShow(string $filename): BinaryFileResponse { $path = storage_path('app/files/' . $filename); if (!file_exists($path)) { throw new NotFoundHttpException('File not found'); } return new BinaryFileResponse($path); } } ?>

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

"BinaryFileResponse if file exists, NotFoundHttpException otherwise"

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

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