Метод setFile
Класс BinaryFileResponse используется для
отправки файлов клиенту. Метод setFile
позволяет задать или заменить файл, который
будет отправлен в ответе. Первым параметром
передаётся путь к файлу, вторым - флаг
$create. Если он равен true,
создаётся новый экземпляр
BinaryFileResponse, если false -
меняется файл у текущего объекта.
Синтаксис
public function setFile(
string|File $file,
bool $create = true,
bool $public = false,
bool $autoLastModified = true
): static
Пример
Давайте отправим клиенту файл 'file.txt':
<?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('/download', name: 'file_download')]
public function download(): BinaryFileResponse
{
$res = new BinaryFileResponse('file.txt');
return $res;
}
}
?>
Результат выполнения кода:
"file contents"
Пример
Давайте создадим ответ без файла и затем
зададим его через setFile:
<?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('/download', name: 'file_download')]
public function download(): BinaryFileResponse
{
$res = new BinaryFileResponse('file.txt');
$res->setFile('article.txt');
return $res;
}
}
?>
Результат выполнения кода:
"article contents"
Пример
Давайте передадим вторым параметром 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('/download', name: 'file_download')]
public function download(): BinaryFileResponse
{
$res = new BinaryFileResponse('file.txt');
$res->setFile('user.txt', false);
return $res;
}
}
?>
Результат выполнения кода:
"user contents"
Смотрите также
-
класс
BinaryFileResponse,
который отправляет файлы клиенту -
метод
setContentDisposition,
который задаёт заголовок Content-Disposition -
метод
deleteFileAfterSend,
который удаляет файл после отправки -
класс
StreamedResponse,
который отправляет поток данных клиенту