snewer / yii2-storage
5.0.1
2020-01-25 12:01 UTC
Requires
- yiisoft/yii2: *
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
方法的实现不依赖于存储库名称。也就是说,在同一个模型中,可以组织复杂的文件存储逻辑,并在不同的存储库之间轻松管理。