هل تريد حذف الملف غير المُدار بعد التنزيل؟
-
29-09-2020 - |
سؤال
في وحدة مخصصة أقوم بإنشاء ملف ثم استخدامه drupal_goto
لتنزيله.كيف يمكنني حذف الملف بعد تنزيله؟وضع أ file_unmanaged_delete
بعد drupal_goto
لا يتم إعدامه، و hook_file_download
يحدث قبل التنزيل للتحقق من الأذونات وما إلى ذلك.لذلك لست متأكدًا من كيفية القيام بذلك.هل يجب علي اللجوء إلى تنظيف الملفات الموجودة في مجلد باستخدام cron بطريقة أو بأخرى؟
لا يوجد حل صحيح
نصائح أخرى
// Generate pdf card.
$file_path = $crm_card->generatePdfCard();
$filename = basename($file_path);
$headers = [
'Content-Type' => 'application/octet-stream',
'Content-Disposition' => 'attachment; filename="' . $filename . '"',
'Content-Length' => filesize($file_path),
];
$binary_file_response = new BinaryFileResponse($file_path, 200, $headers);
$binary_file_response->deleteFileAfterSend(TRUE);
return $binary_file_response;
سيقوم الكود التالي بإزالة الملف بعد التنزيل مع الأخذ في الاعتبار أن ملفك موجود في دليل tmp.
$filename = 'foobar.xls';
$temp_path = realpath(file_directory_temp()) . '/';
if (file_exists($temp_path . $filename)) {
// Serve file download.
drupal_add_http_header('Pragma', 'public');
drupal_add_http_header('Expires', '0');
drupal_add_http_header('Cache-Control', 'must-revalidate, post-check=0, pre-check=0');
drupal_add_http_header('Content-Type', 'application/vnd.ms-excel');
drupal_add_http_header('Content-Disposition', 'attachment; filename=' . basename($temp_path . $filename) . ';');
drupal_add_http_header('Content-Transfer-Encoding', 'binary');
drupal_add_http_header('Content-Length', filesize($temp_path . $filename));
readfile($temp_path . $filename);
unlink($temp_path . $filename);
drupal_exit();
}
يمكنك زيارة الرابط التالي للحصول على التفاصيلhttp://kahthong.com/2012/08/simple-example-how-use-drupal-serve-file-downloads
شكرًا!
لا تنتمي إلى drupal.stackexchange