Laravel 腾讯云 cos 存储扩展

推荐使用 overtrue/laravel-filesystem-cos

https://github.com/overtrue/laravel-filesystem-cos

基于 overtrue/flysystem-cos 的 Laravel 腾讯云 COS 存储扩展。

安装

composer require "overtrue/laravel-filesystem-cos" -vvv

配置

config/ilesystems.php 配置文件中添加一个新的disk

<?php

return [
   'disks' => [
       //...
       'cos' => [
           'driver' => 'cos',

           'app_id'     => env('COS_APP_ID'),
           'secret_id'  => env('COS_SECRET_ID'),
           'secret_key' => env('COS_SECRET_KEY'),
           'region'     => env('COS_REGION', 'ap-guangzhou'),

           'bucket'     => env('COS_BUCKET'),  // 不带数字 app_id 后缀
           'cdn'        => env('COS_CDN'),
           'signed_url' => false,

           'prefix' => env('COS_PATH_PREFIX'), // 全局路径前缀

           'guzzle' => [
               'timeout' => env('COS_TIMEOUT', 60),
               'connect_timeout' => env('COS_CONNECT_TIMEOUT', 60),
           ],
       ],
       //...
    ]
];

使用


$disk = Storage::disk('cos');

// create a file
$disk->put('avatars/filename.jpg', $fileContents);

// check if a file exists
$exists = $disk->has('file.jpg');

// get timestamp
$time = $disk->lastModified('file1.jpg');
$time = $disk->getTimestamp('file1.jpg');

// copy a file
$disk->copy('old/file1.jpg', 'new/file1.jpg');

// move a file
$disk->move('old/file1.jpg', 'new/file1.jpg');

// get file contents
$contents = $disk->read('folder/my_file.txt');

// get file url
$url = $disk->getUrl('folder/my_file.txt');

完整的使用文档请参考 :API文档

http://flysystem.thephpleague.com/api/

注意事项

该扩展disk名称默认写死了cos, 因此默认只支持一套cos配置,若项目需要多套cos配置可以自己注册服务,引入不同的cos配置

app/Providers/AppServiceProvider.php 文件的boot() 方法中注册一个新的cos驱动的disk

    use League\Flysystem\Filesystem;
    use Overtrue\Flysystem\Cos\CosAdapter;
    use Overtrue\Flysystem\Cos\Plugins\FileSignedUrl;
    use Overtrue\Flysystem\Cos\Plugins\FileUrl;

    public function boot()
    {
        Storage::extend('backup_cos', function () {
            $adapter = new CosAdapter(\config('filesystems.disks.backup_cos'));

            $filesystem = new Filesystem($adapter);
            $filesystem->addPlugin(new FileUrl());
            $filesystem->addPlugin(new FileSignedUrl());

            return $filesystem;
        });
    }

另外对于非Laravel框架的PHP项目可使用 overtrue/flysystem-cos 扩展

引用链接

[1] overtrue/laravel-filesystem-cos: https://github.com/overtrue/laravel-filesystem-cos
[2] API文档: http://flysystem.thephpleague.com/api/
[3] overtrue/flysystem-cos: https://github.com/overtrue/flysystem-cos