insolita/yii2-multifs

基于 (League\Flysystem\MountManager) 的多文件系统管理器,用于处理一组文件系统。

安装: 3

依赖项: 0

建议者: 0

安全: 0

星星: 3

关注者: 3

分支: 0

开放问题: 0

类型:yii2-extension

1.0.0 2017-11-03 19:05 UTC

This package is auto-updated.

Last update: 2024-08-29 04:37:08 UTC


README

  • 提供基于 (League\Flysystem\MountManager) 的多文件系统管理器,用于处理文件系统(League\Flysystem\Filesystem);
  • 提供灵活的上传服务,支持不同的文件命名、文件路径结构和文件保存策略
  • 提供示例上传、查看和删除操作,输出与 trntv\filekit\widget\Upload 兼容

Status

安装

首选安装此扩展的方式是通过 composer

运行以下命令:

composer require --prefer-dist insolita/yii2-multifs "~1.0.0"

或者在您的 composer.json 文件的 require 部分添加:

"insolita/yii2-multifs": "~0.0.1"

使用

安装扩展后,只需在代码中通过以下方式使用它:

在 bootstrap 中定义必要的文件系统

 $avatars = (new \insolita\multifs\builders\LocalFsBuilder('@app/web/uploads/avatars'))->build();
 $covers = (new \insolita\multifs\builders\LocalFsBuilder('@app/web/uploads/covers'))->build();
 $attach = (new \insolita\multifs\builders\LocalFsBuilder('@app/web/uploads/attach'))->build();
 $data = (new \insolita\multifs\builders\LocalFsBuilder('@data'))->build();

(确保已定义别名)

在容器中注册

 \insolita\multifs\contracts\IMultifsManager::class                                              => [
                \insolita\multifs\MultiFsManager::class,
                [
                    [
                        'avatars'  => $avatars,
                        'covers'   => $covers,
                        'attach'   => $attach,
                        'internal' => $data,
                    ],
                ],
            ],
            \insolita\multifs\contracts\IUploader::class=>[
                \insolita\multifs\Uploader::class,
                [
                    \yii\di\Instance::of(\insolita\multifs\contracts\IMultifsManager::class),
                    'attach'
                ]
            ],

您还可以添加组件别名

'components'=>[
   'multifs'=>\insolita\multifs\contracts\IMultifsManager::class,
   'uploader'=>\insolita\multifs\contracts\IUploader::class,
]

即时使用

    echo Yii::$app->multifs->listPrefixes();
    Yii::$app->multifs->mountFilesystem('special', new Filesystem(new Adapter(...)));
    Yii::$app->multifs->write('special://some/file/path/name.txt','Hello Test');
    $fs = Yii::$app->multifs->getFilesystem('internal');
    Vardumper::dump($fs->listConents('',true));

上传器

   $file = \yii\web\UploadedFile::getInstanceByName('file');
   $path = Yii::$app->uploader->setFsPrefix('avatars')
             ->setFileNameStrategy(new insolita\multifs\strategy\filename\AsIsStrategy())
             ->setFilePathStrategy(new insolita\multifs\strategy\filename\NameHashStrategy())
             ->setFileSaveStrategy(new insolita\multifs\strategy\filename\ExceptionSaveExistsStrategy())
             ->save($file);

  \Yii::$app->response->sendStreamAsFile(Yii::$app->multifs->readStream($path),
                                          pathinfo($path, PATHINFO_BASENAME),
                                          [
                                             'mimeType' => $file->getType(),
                                             'inline'=>true
                                          ]);

其他文档将在以后发布;请参阅测试