abianbiya/filehandler

用于在 Laravel 中存储和版本控制文件的 Filehandler

0.1.1 2024-05-29 14:41 UTC

This package is auto-updated.

Last update: 2024-09-29 15:19:22 UTC


README

Latest Version on Packagist Total Downloads Build Status

一个简单的包,用于处理上传文件并将其版本化到本地磁盘或 AWS S3。

安装

通过 Composer

$ composer require abianbiya/filehandler

用法

主要待办事项

  1. 让你的模型(其中将包含附加文件)实现 HasFile 并使用 InteractsWithFile 特性
  2. 这就对了。

配置默认磁盘

  1. 设置 FILESYSTEM_DISK 环境变量(本地或 s3)
  2. 如果你使用 s3,填写配置细节
    AWS_ACCESS_KEY_ID=
    AWS_SECRET_ACCESS_KEY=
    AWS_DEFAULT_REGION=ap-southeast-3
    AWS_BUCKET=
    

存储文件

存储从请求上传的文件

  1. 设置你的请求验证
  2. 通过调用模型并保存来捕获文件字段
    $model->addFileFromRequest('fieldname', 'foldername')->save();
    • 字段名为表单 name
    • 文件夹名为...你知道,文件的 类型 或任何将文件分类到某个类别的东西(实际上这将被用作存储中的文件夹名)

从路径存储文件

$model->addFileFromPath('path', 'foldername')->save();
  • 路径是路径
  • 文件夹名是...你知道,文件的 类型 或任何将文件分类到某个类别的东西(实际上这将被用作存储中的文件夹名)

设置文件属性

在调用 ->addFileFrom{What} 之前使用此功能设置模型附加文件的某些属性。

$model->disk('local')->setProperties($array)->replace()->addFileFrom
  • disk() 用于指定磁盘,默认磁盘为环境变量 FILESYSTEM_DISK
  • setProperties() 用于附加信息,在此处放置数组,它将作为 json 存储。
  • replace() 如果模型只存储一个文件到指定文件夹,则可以在更新时调用此功能

检索文件

通过向你的模型添加 filefiles 惰性加载 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 文件 了解更多信息。