Метод deleteFileAfterSend
Метод deleteFileAfterSend принадлежит классу
BinaryFileResponse и указывает Symfony удалить
файл с диска сразу после того, как содержимое файла
будет отправлено клиенту. Метод не принимает параметров
и возвращает объект BinaryFileResponse, что
позволяет использовать его в цепочке вызовов. По
умолчанию файл не удаляется.
Синтаксис
$response->deleteFileAfterSend(bool $shouldDelete = 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('/file', name: 'file_download')]
public function download(): BinaryFileResponse
{
$response = new BinaryFileResponse('file.txt');
$response->deleteFileAfterSend(true);
return $response;
}
}
?>
После того как клиент получит файл 'file.txt',
он будет автоматически удалён с сервера.
Пример
Давайте временно отключим удаление файла, передав
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/save', name: 'file_save')]
public function save(): BinaryFileResponse
{
$response = new BinaryFileResponse('file.txt');
$response->deleteFileAfterSend(false);
return $response;
}
}
?>
В этом случае файл останется на диске после отправки.
Пример
Давайте сгенерируем временный файл, отдадим его пользователю и удалим сразу после отправки:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\Routing\Attribute\Route;
class ReportController extends AbstractController
{
#[Route('/report', name: 'report_download')]
public function download(): BinaryFileResponse
{
$path = sys_get_temp_dir() . '/report.txt';
file_put_contents($path, 'article');
$response = new BinaryFileResponse($path);
$response->deleteFileAfterSend(true);
return $response;
}
}
?>
После отправки файл '/tmp/report.txt' будет удалён
автоматически, что позволяет не заботиться о ручной
очистке временных файлов.
Смотрите также
-
класс
BinaryFileResponse,
который отдаёт файл в бинарном виде -
метод
setContentDisposition,
который задаёт заголовок Content-Disposition -
метод
setFile,
который задаёт отдаваемый файл -
класс
Response,
который представляет базовый HTTP-ответ