snewer/yii2-storage

安装: 511

依赖: 2

建议者: 0

安全: 0

星星: 0

关注者: 1

分支: 0

开放问题: 0

类型:yii2-extension

5.0.1 2020-01-25 12:01 UTC

This package is auto-updated.

Last update: 2024-09-25 22:07:05 UTC


README

组件作为composer包进行分发,并使用以下命令安装:

php composer.phar require snewer/yii2-storage

或者通过在项目的composer.json文件中添加以下内容:

"snewer/yii2-storage": "*"

配置

组件的任务是提供接口以实现存储库及其使用。

组件只有一个属性 buckets,在其中需要指定存储库配置数组。

注意!数组键是存储库的名称,后续将通过该名称获取存储库实例。

项目中的组件连接示例

[
    // ...
    'components' => [
        //...
        'storage' => [
            'class' => 'snewer\storage\StorageManager',
            'buckets' => []
        ],
        //...
    ],
    // ...
]


存储库是指实现抽象类 snewer\storage\AbstractBucket 接口的具体实现,允许

  • 上传文件
  • 获取文件内容
  • 删除文件
  • 获取文件的网络链接

从任何系统 (例如,文件系统) 或服务 (例如,Amazon AWS)

因此,要实现存储库,需要从抽象类继承

snewer\storage\AbstractBucket


默认提供本地文件系统驱动器

snewer\storage\drivers\FileSystemDriver

它具有以下属性

浏览器对服务器同时连接数有限制。要突破限制,可以使用指向同一目录的不同域。


使用存储库配置组件的示例

[
    // ...
    'components' => [
        //...
        'storage' => [
            'class' => 'snewer\storage\StorageManager',
            'buckets' => [
                'images' => [
                    'class' => 'snewer\storage\drivers\FileSystemDriver',
                    'basePath' => '@frontend/web/uploads/images/',
                    'baseUrl' => '@web/uploads/images/',
                    'depth' => 4
                ],
                'documents' => [
                    'class' => 'snewer\storage\drivers\FileSystemDriver',
                    'basePath' => '@frontend/web/uploads/documents/',
                    'baseUrl' => '@web/uploads/documents/',
                    'depth' => 4
                ],
                // ...
            ]
        ],
        //...
    ],
    // ...
]

使用

配置组件后,可以使用组件方法或直接调用存储库对象来使用存储库。

以下是在项目模型 app\models\Image 中实现上传图像和获取其URL链接的方法示例

public static function upload($imageBinary)
{
    $path =  Yii::$app->storage->upload('images', $imageBinary, 'jpg');
    $model = new self;
    $model->path = $path;
    $model->save();
    return $model;
}

然后在同一模型中添加获取图像链接的方法

public function getUrl()
{
    return Yii::$app->storage->getUrl('images', $this->path);
}

之后,可以按以下方式上传图像

$image = app\models\Image::upload($imageBinary);

并在某些表示中输出图像

<img src="<?= $image->url ?>">


使用存储库对象实现相同方法的示例

public static function upload($imageBinary)
{
    $path = Yii::$app->storage->images->upload($imageBinary, 'jpg');
    $model = new self;
    $model->path = $path;
    $model->save();
    return $model;
}

public function getUrl()
{
    return Yii::$app->storage->images->getUrl($this->path);
}


应注意的是,getUrl 方法的实现不依赖于存储库名称。也就是说,在同一个模型中,可以组织复杂的文件存储逻辑,并在不同的存储库之间轻松管理。