如何删除 public 个超过一小时的存储文件?
How to delete public storage files older than last one hour?
我正在处理一个需要从 storage/public/dir_name/
中删除所有文件的项目。示例文件名为 jIK4uh.png
。我应该为此任务使用 cron 作业。这是我正在遵循的方法。
app/console/commands/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
现在如何select所有早于前一小时的文件并按照此策略每小时删除一次?或者任何其他有效的想法来做这些事情?
Laravel 版本:7.30
基本思路是使用 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));
}
}
这可能对您有所帮助。
首先,我从 temp-files
文件夹中获取所有文件并将它们放入集合中。
遍历集合并将每个文件的上次修改日期和时间与 now()->addHour()
进行比较,如果是旧文件,则文件将被删除。
public function deleteOldFiles() {
$files = collect(Storage::allFiles('temp-files'));
$files->each(function ($file) {
$lastModified = Storage::lastModified($file);
$lastModified = Carbon::parse($lastModified);
if (Carbon::now()->gt($lastModified->addHour())) {
Storage::delete($file);
}
});
return true;
}
我正在处理一个需要从 storage/public/dir_name/
中删除所有文件的项目。示例文件名为 jIK4uh.png
。我应该为此任务使用 cron 作业。这是我正在遵循的方法。
app/console/commands/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
现在如何select所有早于前一小时的文件并按照此策略每小时删除一次?或者任何其他有效的想法来做这些事情?
Laravel 版本:7.30
基本思路是使用 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));
}
}
这可能对您有所帮助。
首先,我从 temp-files
文件夹中获取所有文件并将它们放入集合中。
遍历集合并将每个文件的上次修改日期和时间与 now()->addHour()
进行比较,如果是旧文件,则文件将被删除。
public function deleteOldFiles() {
$files = collect(Storage::allFiles('temp-files'));
$files->each(function ($file) {
$lastModified = Storage::lastModified($file);
$lastModified = Carbon::parse($lastModified);
if (Carbon::now()->gt($lastModified->addHour())) {
Storage::delete($file);
}
});
return true;
}