bagart/selectel-storage

Selectel CDN 存储用于 League Flysystem。Laravel 推荐使用

dev-master 2018-09-20 09:14 UTC

This package is not auto-updated.

Last update: 2024-09-27 15:50:31 UTC


README

可选:Laravel 5.* 存储

设置 Selectel 官方网站

  • 在 Selectel 注册
  • 在 Selectel 存储中创建容器(建议使用私有访问)
  • 创建用于安全使用的用户
  • 为容器授予自定义访问权限(读/写)

安装 composer 包

composer require bagart/selectel-storage

配置 ENV

添加到 $_ENV(Laravel: .env 文件)

SELECTEL_URL=https://auth.selcdn.ru/
SELECTEL_USERNAME=00000_some_user
SELECTEL_PASSWORD=___PASSWORD___

可选

为安全使用无需密码访问文件的私有文档 - 准备 TEMP_URL_SECRET 原因:使用临时密钥访问私有文件

添加到 $_ENV(Laravel: .env 文件)

SELECTEL_TEMP_URL_SECRET=___ANY_SAFE_STRING_AS_SECRET___

预设 ___ANY_SAFE_STRING_AS_SECRET___ 到 CDN

#put username and password
curl -i -X POST https://api.selcdn.ru/v2.0/tokens -H 'Content-type: application/json' -d '{"auth": {"passwordCredentials": {"username": "00000_some_user", "password": "___PASSWORD___"}}}'
#put selectel_id, ___TOKEN___ and ___ANY_SAFE_STRING_AS_SECRET___
curl -i -X POST https://api.selcdn.ru/v1/SEL_00000 -H "X-Auth-Token: ___TOKEN___" -H "X-Account-Meta-Temp-URL-Key: ___ANY_SAFE_STRING_AS_SECRET___"

配置 APP

Laravel: 在 config/filesystems.php 中的 disks 部分添加

   'some_named_container' => [
        'driver' => 'selectel',
        'serviceName'  => env('SELECTEL_SERVICE_NAME'),
        'username' => env('SELECTEL_USERNAME'),
        'password' => env('SELECTEL_PASSWORD'),
        'endpoint' => env('SELECTEL_URL'),
        'container' => env('FS_NS_DEFAULT', 'default'),
        'tenantId'     => env('SELECTEL_TENANT_ID'),
        'tenantName'   => env('SELECTEL_TENANT_NAME'),
        'region'        => env('SELECTEL_REGION'),
#        'cache' => [
#            'store' => env('SELECTEL_CACHE_DRIVER')
#                ?? env('CACHE_DRIVER')
#                ?? 'redis',
#            'expire' => env('SELECTEL_CACHE_EXPIRE', 600),
#            'prefix' => 'cache-selectel-'.env('FS_NS_DEFAULT', 'default'),
#        ],
    ],

旧版

对于小于 5.5 版本的 Laravel(在实际版本中不需要)在 config/app.php 中的 service_provider 部分添加

BAGArt\SelectelStorage\SelectelServiceProvider::class,

Laravel 使用

    dump([
        'put' => Storage::disk('some_named_container')->put('test_file_name', 'some test content'),
        'get' => Storage::disk('some_named_container')->get('test_file_name'),
        'delete' =>  Storage::disk('some_named_container')->delete('test_file_name'),
    ]);

原生使用

    //example in configure section
    $config_selectel =  config('filesystem.disks.some_named_container');
    
    $disk = new Filesystem(
        new SelectelAdapter(
            (new SelectelOpenStack(
                $config_selectel['endpoint'],
                $config_selectel
            ))
                ->buildContainer()
        )
    );