djurovicigoor/lara-files

lara-files是一个使文件操作更简单的包。该包内置了对DigitalOcean spaces和Amazon S3的支持。

v1.3.8 2024-01-10 08:36 UTC

This package is auto-updated.

Last update: 2024-09-10 10:01:32 UTC


README

Latest Version on Packagist Total Downloads License: MIT Scrutinizer code quality (GitHub/Bitbucket) Scrutinizer build (GitHub/Bitbucket)

lara-files是一个使文件操作更简单的包。该包内置了对DigitalOcean spaces和Amazon S3的支持。此包可用于Laravel 5.5或更高版本。

lara-files preview

安装

您可以通过composer安装此包

$ composer require djurovicigoor/lara-files

服务提供器将自动注册。或者,您可以在您的config/app.php文件中手动添加服务提供器

'providers' => [
    // ...
    DjurovicIgoor\LaraFiles\LaraFilesProvider::class,
];

现在您可以发布服务提供器

php artisan vendor:publish --provider="DjurovicIgoor\LaraFiles\LaraFilesProvider"

在发布配置文件和迁移之后,如果您想更改默认可见性,可以在config/lara-files.php配置文件中更改

/*
|--------------------------------------------------------------------------
| Default visibility
|--------------------------------------------------------------------------
|
| public  => Files are accessible through a browser
| private => Files are not accessible through a browser
*/
'visibility'   => 'public',

之后,您可以通过运行迁移来创建lara-files表

$ php artisan migrate

LaraFile模型和数据库模式

LaraFile模型默认提供一个MorphToMany关系。如果您想使用默认的laraFile()关系之外的更多关系,您应该修改config/lara-files.php中的types数组

/*
|--------------------------------------------------------------------------
| Type of files - relations
|--------------------------------------------------------------------------
|
*/
'types' => [
    'file',
    'avatar',
    'thumbnail',
],

您可以随意修改此数组,添加或删除项目。在这个例子中,我有3个类型。对于这些类型中的每一个,包默认为您创建与您的模型和LaraFile模型之间的关系。

如果我用头像作为例子,您的模型将有以下关系和属性

  • avatar() - 返回到一个Morph to One关系查询构建器的查询
  • avatars() - 返回到一个Morph to Many关系查询构建器的查询
  • getAvatar() - 返回单个相关的LaraFile模型
  • getAvatars() - 返回相关LaraFile模型的集合

此外,您还有懒加载关系avataravatars,它们与getAvatar()getAvatars()方法做同样的事情。

$avatar  = $post->avatar
$avatars = $post->avatars

这些方法和属性适用于此types数组中的任何类型。

数据库模式

  • disk - (字符串) 存储文件的磁盘驱动器。
  • path - (字符串) 相对文件路径。
  • hash_name - (字符串) 文件的哈希名称。
  • extension - (字符串) 文件的原始扩展名。
  • name - (字符串) 文件的原始名称。
  • type - (字符串) 文件的类别。例如:头像、缩略图、文档等。
  • visibility - (字符串) 文件的浏览器可见性。
  • description - (文本) 文件的描述。
  • author_id - (整数) 文件的作者。
  • larafilesable_type - (字符串) 所属模型名称。
  • larafilesable_id - (整数) 所属模型ID。

使用方法

在您开始使用此包之前,您必须检查您的config/filesystems.php文件,并设置正确的磁盘驱动器。包支持以下驱动器:'local'、'public'、'DOSpaces'、'Amazon S3'。以下是正确磁盘驱动器的示例。

'disks' => [
     'local' => [
        'driver'    => 'local',
        'root'      => storage_path('app'),
     ],
    'public' => [
        'driver'        => 'local',
        'root'          => storage_path('app/public'),
        'url'           => env('APP_URL').'/storage',
        'visibility'    => 'public',
    ],
    'DOSpaces' => [
        'driver'   => 's3',
        'key'      => env('DO_SPACES_KEY' , 'Your spaces key goes here'),
        'secret'   => env('DO_SPACES_SECRET' , 'Your spaces secret goes here'),
        'endpoint' => env('DO_SPACES_ENDPOINT' , 'Your spaces endpoint goes here'),
        'region'   => env('DO_SPACES_REGION' , 'Your spaces region goes here'),
        'bucket'   => env('DO_SPACES_BUCKET' , 'Your spaces bucket goes here'),
        'url'      => env('AWS_URL' , 'https://{BUCKET}.{REGION}.digitaloceanspaces.com/'),
    ],
    's3' => [
        'driver' => 's3',
        'key'       => env('AWS_ACCESS_KEY_ID' , 'Your aws acces key goes here'),
        'secret'    => env('AWS_SECRET_ACCESS_KEY' , 'Your aws secret key goes here'),
        'region'    => env('AWS_DEFAULT_REGION' , 'Your aws default region goes here'),
        'bucket'    => env('AWS_BUCKET' , 'Your aws bucket name goes here'),
        'url'       => env('AWS_URL' , 'https://s3.{REGION}.amazonaws.com/{BUCKET}/'),
    ]
],

设置磁盘驱动器时,将DjurovicIgoor\LaraFiles\Traits\LaraFileTrait特性添加到您的模型中

use DjurovicIgoor\LaraFiles\Traits\LaraFileTrait;
use Illuminate\Database\Eloquent\Model;

class Post extends Model {
    
    use LaraFileTrait;
    // ...
}

成功设置磁盘驱动器后,您必须运行php artisan storage:link以将您的storage/app/publicpublic/storage文件夹链接,如果您想通过具有'public'驱动器或可见性的浏览器访问文件。现在,您已准备好Eloquent模型以使用Trait功能

特性函数

所有函数都可以在数据库中已存储的模型上调用。所有函数的第一个参数是磁盘适配器,您已经在您的config/filesistems.php中定义了其中之一。

下面将解释每个函数的第二个参数。

所有函数的第三个参数是文件类型,即某种分类。你可以传递任何东西,只要它是以字符串格式存在即可。稍后,所有文件都可以通过这些参数进行分类。

所有函数的第四个参数是 $additionalParameters 变量,应该是一个键 => 值数组。

$additionalParameters = [
    'visibility'    => 'public',
    'description'   => 'Lorem ipsum dolor sit amet . . .',
    'author_id'     => $user->id
];

上述数组中的每一项都是可选的。如果你想,你可以传递一个空数组。

uploadHttpFile()

使用此函数,你可以上传单个 HttpUploadedFile 文件并将其与你的模型关联。

$post = Post::find($id);
$post->uploadHttpFile('local', $request->file('image'), 'thumbnail', $additionalParameters = [])

uploadHttpFiles()

使用此函数,你可以上传 HttpUploadedFile 文件的数组并将其与你的模型关联。

$post = Post::find($id);
$post->uploadHttpFiles('local', $arrayOfHttpUploadedFiles, 'thumbnail', $additionalParameters = [])

uploadBase64File()

使用此函数,你可以上传单个 base64 文件并将其与你的模型关联。

$post = Post::find($id);
$post->uploadBase64File('local', $base64String, 'thumbnail', $additionalParameters = [])

uploadBase64Files()

使用此函数,你可以上传 base64 文件的数组并将其与你的模型关联。

$post = Post::find($id);
$post->uploadBase64Files('local', $arrayOfBase64String, 'thumbnail', $additionalParameters = [])

变更日志

请参阅 changelog.md 了解最近的变化。

贡献

请参阅 contributing.md 了解详细信息以及待办事项列表。

安全

如果你发现任何与安全相关的问题,请通过电子邮件 djurovic.igoor@gmail.com 而不是使用问题跟踪器。

捐赠

如果你发现这个项目很有帮助,或者你从源代码中学到了一些东西,并想表示感激

鸣谢

贡献者

许可

MIT。请参阅 许可文件 了解更多信息。