Începând de la Cum creez o adresă URL de descărcare a fișierului?
Am construit un controler personalizat care permite utilizatorilor să descarce un fișier PDF.
my_module.routing.yml
my_module.pdf_link:
cale: „/my-module/pdf/download”
implicite:
_title: „Descărcare PDF”
_controller: „\Drupal\my_module\Controller\MyModuleController::downloadPDF”
cerinte:
_rol: „autentificat”
MyModuleController
funcția publică downloadPDF() {
$pdf_stream = $this->restCallThatReturnAPdfStream();
$headers = [
„Content-Type” => „aplicație/pdf”,
'Content-Disposition' => 'attachment;filename="download.pdf"'
];
$temporary_pdf_file = $this->fileSystem->saveData($pdf_stream, 'temporary://mytempfile.pdf', FileSystemInterface::EXISTS_REPLACE);
returnează un nou BinaryFileResponse($temporary_pdf_file, 200, $headers, TRUE);
}
Acest fișier trebuie să fie privat pentru fiecare utilizator, așa că alți utilizatori nu ar trebui să-l poată descărca.
Cred că aș putea șterge fișierul după ce controlerul returnează răspunsul, în loc să implementez o verificare complexă de control al accesului pentru fișier, dar nu am idee cum pot face cu ușurință.
De exemplu, aș putea seta o coadă Cron pentru a șterge acele fișiere la fiecare N minute, dar mi se pare exagerat.
De asemenea, nu pot schimba atunci când fișierele temporare sunt șterse, deoarece acele fișiere sunt folosite în altă parte a site-ului și nu aș risca să sparg o altă logică existentă.