abianbiya / filehandler
用于在 Laravel 中存储和版本控制文件的 Filehandler
0.1.1
2024-05-29 14:41 UTC
Requires
- php: ^8.0|^8.1|^8.2|^8.3
- laravel/framework: ^9.0|^10.0|^11.0
- league/flysystem-aws-s3-v3: ^3.0
Requires (Dev)
- orchestra/testbench: ~7
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2024-09-29 15:19:22 UTC
README
一个简单的包,用于处理上传文件并将其版本化到本地磁盘或 AWS S3。
安装
通过 Composer
$ composer require abianbiya/filehandler
用法
主要待办事项
- 让你的模型(其中将包含附加文件)实现
HasFile
并使用InteractsWithFile
特性 - 这就对了。
配置默认磁盘
- 设置
FILESYSTEM_DISK
环境变量(本地或 s3) - 如果你使用 s3,填写配置细节
AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=ap-southeast-3 AWS_BUCKET=
存储文件
存储从请求上传的文件
- 设置你的请求验证
- 通过调用模型并保存来捕获文件字段
$model->addFileFromRequest('fieldname', 'foldername')->save();
- 字段名为表单
name
- 文件夹名为...你知道,文件的 类型 或任何将文件分类到某个类别的东西(实际上这将被用作存储中的文件夹名)
- 字段名为表单
从路径存储文件
$model->addFileFromPath('path', 'foldername')->save();
- 路径是路径
- 文件夹名是...你知道,文件的
类型
或任何将文件分类到某个类别的东西(实际上这将被用作存储中的文件夹名)
设置文件属性
在调用 ->addFileFrom{What}
之前使用此功能设置模型附加文件的某些属性。
$model->disk('local')->setProperties($array)->replace()->addFileFrom
disk()
用于指定磁盘,默认磁盘为环境变量 FILESYSTEM_DISKsetProperties()
用于附加信息,在此处放置数组,它将作为 json 存储。replace()
如果模型只存储一个文件到指定文件夹,则可以在更新时调用此功能
检索文件
通过向你的模型添加 file
或 files
惰性加载 ORM 关系来访问文件。 file
函数代表单个附加文件,而 files
代表多个文件。
$data['yuhu'] = Model::with('file')->whateverQueryYouWant();
此关系返回 MediaFile 对象实例,因此您可以使用集合过滤多个文件或执行一些操作,例如
@foreach($data as $item) $item->file->getPath(); // returns absolute path to the file $item->file->getUrl(); // returns direct url path without domain $item->file->getFullUrl(); // returns direct full url with domain, recommended for showing file inside html $item->file->getMaskedUrl(); // returns masked url with slug routing, recommended for file direct access $item->file->getThumbnail(int $width); // * returns <img> html tag (with lightbox) for image mimetype or a href link for others, can be used to render image or link inside table. @endforeach
- 发布资产以在 getThumbnail() 方法中使用 lightbox
$ php artisan vendor:publish --tag=filehandler.assets
然后加载资产
<script src="{{ asset('build/vendor/filehandler/js/lightbox-b5.js') }}"></script>
包装文件上传表单的附加选项,带有拖放输入
<link href="{{ asset('build/libs/dropify/css/dropify.min.css') }}" rel="stylesheet" > <script src="{{ asset('build/libs/dropify/js/dropify.min.js') }}"></script>
然后使用类 .dropify
拦截文件访问(使用掩码 URL)
默认文件访问为 true
,否则你希望在掩码 URL 路由中添加网关,将此方法添加到您实现的 InteractsWithFile 模型中
public function canAccessFile() : array|bool { // do some complicated checking algorithm to authorized role or file ownership // you may use Auth::user(), or $this->created_by to check this model record's owner, or whatever return $allowAccess; // returning boolean // OR return [$allowAccess, 'Such a denied message to show in a 403 page']; // returning array (default message: Forbidden.) }
变更日志
有关最近更改的更多信息,请参阅 changelog。
测试
$ composer test
贡献
请参阅 contributing.md 了解详细信息和一个待办事项列表。
安全
如果你发现任何安全相关的问题,请通过 @abianbiya(无论在哪里)打扰我,而不是使用问题跟踪器。
鸣谢
许可
MIT。请参阅 license 文件 了解更多信息。