เริ่มจาก ฉันจะสร้าง URL ดาวน์โหลดไฟล์ได้อย่างไร
ฉันได้สร้างตัวควบคุมแบบกำหนดเองที่อนุญาตให้ผู้ใช้ดาวน์โหลดไฟล์ PDF
my_module.routing.yml
my_module.pdf_link:
เส้นทาง: '/my-module/pdf/download'
ค่าเริ่มต้น:
_title: 'ดาวน์โหลดไฟล์ PDF'
_controller: '\Drupal\my_module\Controller\MyModuleController::downloadPDF'
ความต้องการ:
_role: 'รับรองความถูกต้อง'
ตัวควบคุมโมดูลของฉัน
ฟังก์ชันสาธารณะ downloadPDF() {
$pdf_stream = $this->restCallThatReturnAPdfStream();
$ส่วนหัว = [
'ประเภทเนื้อหา' => 'ใบสมัคร/pdf',
'การจัดการเนื้อหา' => 'ไฟล์แนบ;ชื่อไฟล์ = "ดาวน์โหลด.pdf"'
];
$temporary_pdf_file = $this->fileSystem->saveData($pdf_stream, 'temporary://mytempfile.pdf', FileSystemInterface::EXISTS_REPLACE);
ส่งคืน BinaryFileResponse($temporary_pdf_file, 200, $headers, TRUE);
}
ไฟล์นี้ต้องเป็นไฟล์ส่วนตัวสำหรับผู้ใช้แต่ละราย ดังนั้นผู้ใช้รายอื่นจึงไม่ควรดาวน์โหลดไฟล์ดังกล่าว
ฉันคิดว่าฉันสามารถลบไฟล์ได้หลังจากที่คอนโทรลเลอร์ส่งคืนการตอบสนอง แทนที่จะใช้การตรวจสอบการควบคุมการเข้าถึงที่ซับซ้อนสำหรับไฟล์ แต่ฉันไม่รู้ว่าฉันสามารถทำได้ง่าย ๆ ได้อย่างไร
ตัวอย่างเช่น ฉันสามารถตั้งค่าคิว Cron ให้ลบไฟล์เหล่านั้นทุกๆ N นาที แต่ดูเหมือนว่าจะเกินความจำเป็น
ฉันไม่สามารถเปลี่ยนแปลงเวลาลบไฟล์ชั่วคราวได้ เนื่องจากไฟล์เหล่านั้นถูกใช้ที่อื่นในไซต์ และฉันจะไม่เสี่ยงที่จะทำลายตรรกะอื่นๆ ที่มีอยู่