djurovicigoor / lara-files
lara-files是一个使文件操作更简单的包。该包内置了对DigitalOcean spaces和Amazon S3的支持。
Requires
- league/flysystem-aws-s3-v3: ^1.0|^2.0|^3.0
README
lara-files是一个使文件操作更简单的包。该包内置了对DigitalOcean spaces和Amazon S3的支持。此包可用于Laravel 5.5或更高版本。
安装
您可以通过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模型的集合
此外,您还有懒加载关系avatar
和avatars
,它们与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/public
与public/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。请参阅 许可文件 了解更多信息。