Laravel - Удалить локальный файл после отправки клиенту
Я использую следующее для отправки PDF-файла пользователю, возвращающему
response()->download($filename);
После того, как файл был отправлен для загрузки, нет необходимости хранить его на сервере, и я хотел бы удалить его, чтобы они не засоряли хранилище сервера. Как лучше всего удалить файл после его загрузки? Я собирался использовать завершаемое промежуточное программное обеспечение для обработки этого. Это лучший способ сделать это с Laravel 5.1?
3 answers
Просто опубликуйте это здесь на случай, если у кого-то еще возникнет этот вопрос...
Можно перенести имя файла в сеанс, а затем использовать завершаемое промежуточное программное обеспечение для извлечения переменной сеанса и отсоединения файла.
Вы можете поместить его в очередь и запустить задание удаления, чтобы удалить файл через определенный промежуток времени после загрузки файла.
Документация Ларавеля довольно аккуратная.
Я предлагаю вам создать систему событий/прослушивателей, чтобы код оставался чистым.
1. шаг
EventServiceProvider.php
protected $listen = [
'App\Events\FileHaveDownloadedEvent' => [
'App\Listeners\FileHaveDownloadedListener',
],
];
2. шаг php artisan event:generate
В вашей модели
Пишите так
Event::fire(new FileHaveDownloadedEvent(['filename' => $filename]));
//Слушатель
public function handle(FileHaveDownloadedEvent $event)
{
unlink('/directory/where/file/located/'.$event->filename);
}
Также вы могли бы создавать очереди:)
Удачи!