masterro/laravel-file-cleaner

Laravel 控制台命令,用于删除临时文件及其关联的模型实例。

1.7.0 2020-09-24 10:16 UTC

This package is auto-updated.

Last update: 2024-09-08 17:15:18 UTC


README

Latest Stable Version Total Downloads Build Status License

StandWithUkraine

Laravel 文件清理器

File Cleaner 是一个为 Laravel 5+ 提供删除文件及其关联模型实例的包。

安装

步骤 1: Composer

在命令行中运行

composer require masterro/laravel-file-cleaner

步骤 2: 服务提供者(对于 Laravel < 5.5)

对于您的 Laravel 应用,打开 config/app.php 文件,并在 providers 数组中追加

MasterRO\LaravelFileCleaner\FileCleanerServiceProvider::class

这将引导包进入 Laravel。

步骤 3: 发布配置

首先,在命令行中运行

php artisan vendor:publish --provider="MasterRO\LaravelFileCleaner\FileCleanerServiceProvider"

之后,您将在配置目录中看到 file-cleaner.php 文件

对于此包,您可以设置如下配置

  • paths - 存储临时文件的路径(或将要存储),相对于根目录
  • excluded_paths - 要排除的目录路径,其中不会删除任何内容,相对于根目录
  • excluded_files - 要排除的文件路径,不会删除,相对于根目录
  • time_before_remove - 文件将在删除之前的时间 | 默认 60 分钟
  • model - 将与关联文件一起删除的模型 | 可选
  • file_field_name - 包含删除文件名称的字段名称 | 可选,仅当设置模型时
  • remove_directories - 删除目录标志,如果设置为 true,则将删除所有嵌套目录 | 默认 true
  • relation - 关系,仅当模型实例未设置关系时才删除文件和模型实例

投票回调

此外,您还可以设置静态投票回调或可调用对象,以对删除逻辑有更大的控制权。
您可以在您的服务提供者之一中注册它。回调将在 time_before_removeexcluded_* 检查之后被调用。

FileCleaner::voteDeleteUsing(function($path, $entity) {
    if (isset($entity) && !$entity->user->isActive()) {
        return true;
    }

    return false;
});

如果回调返回 true,则文件和可选的关联记录将在数据库中删除。
如果回调返回 false,则文件和记录不会删除。
否则将执行 relation 检查。

用法

调度

向调度函数添加新的命令调用

如果您需要任何帮助,请查看 Laravel 的任务调度文档

protected function schedule(Schedule $schedule)
{
    $schedule->command('file-cleaner:clean')->everyMinute();
}

这就是全部。如果您的 cron 设置正确,一切都会按预期工作。

手动,使用 artisan 控制台

您可以手动运行删除,只需从命令行运行

php artisan file-cleaner:clean

并查看输出。

或者,如果您想不检查时间就删除文件(仅删除所有设置目录中的所有文件)使用 --force 标志(或 -f 快捷键)

php artisan file-cleaner:clean -f

您甚至可以使用 --directories、--excluded-paths 和 --excluded-files 选项(用逗号分隔)覆盖配置目录中的 pathsexcluded_pathsexcluded_files

php artisan file-cleaner:clean -f --directories=storage/temp/images,public/uploads/test
php artisan file-cleaner:clean -f --excluded-paths=public/uploads/images/default,public/uploads/test
php artisan file-cleaner:clean -f --excluded-files=public/uploads/images/default.png,public/uploads/test/01.png

您甚至可以使用 --remove-directories 选项覆盖 remove_directories 配置值

php artisan file-cleaner:clean -f --directories=storage/temp/images,public/uploads/test --remove-directories=false

如果您喜欢这个项目,请给它点个赞 :)