alaaelgndy/file-uploader

这是一个文件上传管理器

dev-master 2020-05-13 23:06 UTC

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个部分。
  1. 临时文件夹(你可以配置它)。
  2. 相关模型。
  3. 此媒体的类型(你可以自定义自己的类型)。
  4. 文件名。

什么是真实路径?

  • 真实路径是文件的最终位置。
  • 它包含4个部分。
  1. 相关模型。
  2. 相关ID。
  3. 此媒体的类型。
  4. 文件名。

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/

待办事项

  • 增强README文件。
  • 增加单元测试覆盖率。
  • 添加文件缩放功能。
  • 添加更多使用示例。
  • 在异常情况下为API创建自定义响应。
  • 创建命令以清除临时文件夹中的无用数据。
  • 添加版本控制和更改日志文件。
  • 在 Laravel 5.6 或更高版本上测试它(使用 CI)。
  • 配置上传路由。
  • 将中间件分配给上传路由的能力。
  • 将功能测试添加到 API。
  • 翻译异常。
  • 使用目录分隔符常量而不是 '/'。
  • 一次性移动文件数组。
  • 添加同时上传和移动的事件。