Начиная с Как создать URL-адрес для загрузки файла?
Я создал собственный контроллер, который позволяет пользователям загружать PDF-файл.
мой_модуль.routing.yml
мой_модуль.pdf_ссылка:
путь: '/мой-модуль/pdf/скачать'
значения по умолчанию:
_title: 'скачать PDF'
_controller: '\Drupal\my_module\Controller\MyModuleController::downloadPDF'
требования:
_role: 'аутентифицированный'
MyModuleController
общедоступная функция downloadPDF() {
$pdf_stream = $this->restCallThatReturnAPdfStream();
$ заголовки = [
'Content-Type' => 'приложение/pdf',
'Content-Disposition' => 'attachment;filename="download.pdf"'
];
$temporary_pdf_file = $this->fileSystem->saveData($pdf_stream, 'temporary://mytempfile.pdf', FileSystemInterface::EXISTS_REPLACE);
вернуть новый BinaryFileResponse($temporary_pdf_file, 200, $headers, TRUE);
}
Этот файл должен быть приватным для каждого пользователя, чтобы другие пользователи не могли его загрузить.
Я думаю, что мог бы удалить файл после того, как контроллер вернет ответ, вместо того, чтобы выполнять какую-то сложную проверку контроля доступа к файлу, но я понятия не имею, как это легко сделать.
Например, я мог бы установить очередь Cron для удаления этих файлов каждые N минут, но это кажется излишним.
Я также не могу измениться при удалении временных файлов, потому что эти файлы используются где-то еще на сайте, и я бы не рискнул нарушить какую-то другую существующую логику.