Как удалить файлы общего хранилища старше, чем за последний час?

#laravel #cron #laravel-7

Вопрос:

Я работаю над проектом, из которого требуется удалить все файлы storage/public/dir_name/ . Пример имени файла таков jIK4uh.png . Для этой задачи я должен использовать задание cron. Вот метод, которому я следую.

приложение/консоль/команды/ClearPublicStorage.png

 class ClearPublicStorageCron extends Command {

  protected $signature = 'storage:clear';
  
  public function handle()
  {
      Log::info("Public storage files cleared!");

      // tasks logic here

      $this->info('Cron command run successfully');
  }
}
 

app/Console/Kernel.php

 class Kernel extends ConsoleKernel {
  protected function schedule(Schedule $schedule)
    {
        $schedule->command('storage:clear')->hourly();
    }
}
 

Затем бегом php artisan schedule:run

Теперь, как выбрать все файлы, которые старше, чем за последний час, и удалять их каждый час, следуя этой стратегии? Или какая-нибудь другая эффективная идея для этого ?

Версия для Laravel : 7.30

Комментарии:

1. Вы храните имя файла в базе данных?

2. да. Информация о файле хранится в базе данных.

Ответ №1:

Основная идея заключается в использовании storage lastModified даты и времени

получить последние изменения datetime из файла

 $fileTime=Storage::disk('public')->lastModified('dummy.pdf');

$fileModifiedDateTime=Carbon::parse($fileTime);

if(Carbon::now()->gt($fileModifiedDateTime->addHour())){

   //delete file here
}
 

Если вы сохраняете имя файла в базе данных, вы можете удалить его в зависимости от даты загрузки файла

Обновленный

 $files = Storage::disk("public")->allFiles("claim-images");
    
foreach ($files as $file) {
   $time = Storage::disk('public')->lastModified($file);
   $fileModifiedDateTime = Carbon::parse($time);
    
   if (Carbon::now()->gt($fileModifiedDateTime->addHour(1))) {
                
        Storage::disk("public")->delete($file);
    }
    
     //storage symbolic link files not required to delete.Still providing here for you reference
    
   if (File::exists(public_path('storage/' . $file))) {
        
         File::delete(public_path('storage/' . $file));
   }
}
 

Комментарии:

1. lastModified File not found at path ошибка броска.

2. где находится ваш файл .можете ли вы прокомментировать точный путь к файлу

3. точный путь к файлу таков storage/claim-images/filename.png . Я пытаюсь получить последнее изменение с помощью Storage::disk("public")->files("claim-images/filiname.png")

4. затем удалите диск(«общедоступный»)-> из хранилища

5. $fileTime=Хранилище::Последнее изменение(‘claim-изображения/filiname.png’);