alaaelgndy / file-uploader
这是一个文件上传管理器
dev-master
2020-05-13 23:06 UTC
Requires
- php: ^7.2
- intervention/image: ^2.4
- laravel/framework: >=5.5
- league/flysystem-aws-s3-v3: ^1.0
Requires (Dev)
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-14 09:00:57 UTC
README
为什么你需要这个包?
- 它可以处理你应用媒体管理的所有需求。
- 它提供了一个API,使消费者(客户端开发者)的生活变得简单。
- 它将帮助客户端开发者创建可重用的媒体上传组件。
- 如果你正在创建后端系统并且你的所有API都使用json,你仍然不需要使用base64来处理你的媒体。
它是如何工作的?
- 通过使用上传媒体的公开API为上传的文件生成一个临时路径。
- 在配置的存储上上传此临时路径中的文件。
- 返回存储的base url和临时路径。
- 因此,该文件存在于临时路径中,但到目前为止还没有人使用它(它仍然是临时文件)。
- 但是,客户端开发者可以使用base url和临时路径来预览它。
- 然后你可以将此文件关联到应用程序中的任何模型。
- 使用此事件(Elgndy\FileUploader\Events\UploadableModelHasCreated)
什么是临时路径?
- 临时路径是我们用来在早期阶段保存媒体的地方。
- 它包含4个部分。
- 临时文件夹(你可以配置它)。
- 相关模型。
- 此媒体的类型(你可以自定义自己的类型)。
- 文件名。
什么是真实路径?
- 真实路径是文件的最终位置。
- 它包含4个部分。
- 相关模型。
- 相关ID。
- 此媒体的类型。
- 文件名。
API契约。
- 上传API
- URL /upload-media
- 方法:post。
- 头部(内容类型:multipart/encrypted)
- 主体(模型:字符串,媒体类型:字符串,媒体:文件)
安装
composer require alaaelgndy/file-uploader
使用
- 配置你的模型命名空间,例如(App\)。
- 配置你的临时路径,默认为(temp/)。
- 更新你的模型以实现(Elgndy\FileUploader\Contracts\FileUploaderInterface)。
- 在你的上传模型中使用Uploadable特性。
- 实现此函数getMediaTypesWithItsOwnValidationRules()。
- 键是媒体类型
- 值是特定媒体类型的可用扩展。
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Elgndy\FileUploader\Contracts\FileUploaderInterface; use Elgndy\FileUploader\Traits\Uploadable; class User extends Model implements FileUploaderInterface { use Uploadable; public function getMediaTypesWithItsOwnValidationRules(): array { return [ 'images' => [ 'png', 'jpg', 'jpeg', ], 'national_id' => [ 'pdf' ], 'logos' => [ 'png' ] ]; } }
- 在这些点之后,现在你可以让客户端随时调用我们的API来创建临时文件。
如何将临时媒体关联到特定模型记录。
- 首先编写你自己的业务逻辑来创建记录,并在创建后,触发此事件(UploadableMediaHasCreated)并传递你创建的记录(类型为Model)和临时路径。
如果相关模型已删除怎么办。
- 使用此事件将从数据库中删除关系并从文件系统中删除文件夹(UploadableMediaHasDeleted),并传递你删除的记录(类型为Model)。就是这样 :)。
其他有用的函数。
- Uploadable特性具有以下函数。
- media()返回相关媒体的集合。
- getMedia(...$types)返回具有特定类型的相关媒体的集合。
- mediaCount(...$types)返回基于你传递的类型数的整数。
- 自定义图像属性将始终获取第一个媒体(注意这一点)。
文件系统结构
- users/
- userId/
- images/
- logos/
- national_id/
- userId/
待办事项
- 增强README文件。
- 增加单元测试覆盖率。
- 添加文件缩放功能。
- 添加更多使用示例。
- 在异常情况下为API创建自定义响应。
- 创建命令以清除临时文件夹中的无用数据。
- 添加版本控制和更改日志文件。
- 在 Laravel 5.6 或更高版本上测试它(使用 CI)。
- 配置上传路由。
- 将中间件分配给上传路由的能力。
- 将功能测试添加到 API。
- 翻译异常。
- 使用目录分隔符常量而不是 '/'。
- 一次性移动文件数组。
- 添加同时上传和移动的事件。