V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iidestiny
V2EX  ›  PHP

优雅的 Oss Flysystem 扩展

  •  
  •   iidestiny · 2019-01-04 09:42:32 +08:00 · 2860 次点击
    这是一个创建于 1937 天前的主题,其中的信息可能已经有所发展或是发生改变。

    file

    先上链接

    如果觉得帮助了你,节省了你的时间记得 Star 哟.

    序言

    大佬们小弟第一次发帖体谅体谅嘿嘿

    之前用过很多 oss 扩展包但是暂时没有一个用的顺心的,一些扩展包配置太复杂,还有的扩展包不能集成 Laravel 文件驱动,对于喜欢优雅编码的同学可能不能忍受

    最近闲下来看了一些优秀的开源项目,从中学到不少东西。然后决定自己也写一个 oss 扩展包.

    要求

    • PHP >= 7.0

    第一个扩展包:直接使用不依赖框架

    $ composer require "iidestiny/flysystem-oss" -vvv
    

    配置

    use League\Flysystem\Filesystem;
    use Iidestiny\Flysystem\Oss\OssAdapter;
    use Iidestiny\Flysystem\Oss\Plugins\FileUrl;
    
    $accessKeyId = 'xxxxxx';
    $accessKeySecret = 'xxxxxx';
    $endpoint= 'oss.iidestiny.com';
    $bucket = 'bucket';
    $isCName = true; // 如果 isCname 为 false,endpoint 应配置 oss 提供的域名如:`oss-cn-beijing.aliyuncs.com`,cname 或 cdn 请自行到阿里 oss 后台配置并绑定 bucket
    
    $adapter = new OssAdapter($accessKeyId, $accessKeySecret, $endpoint, $bucket, $isCName);
    
    $flysystem = new Filesystem($adapter);
    
    

    API

    bool $flysystem->write('file.md', 'contents');
    
    bool $flysystem->write('file.md', 'http://httpbin.org/robots.txt', ['options' => ['xxxxx' => 'application/redirect302']]);
    
    bool $flysystem->writeStream('file.md', fopen('path/to/your/local/file.jpg', 'r'));
    
    bool $flysystem->update('file.md', 'new contents');
    
    bool $flysystem->updateStream('file.md', fopen('path/to/your/local/file.jpg', 'r'));
    
    bool $flysystem->rename('foo.md', 'bar.md');
    
    bool $flysystem->copy('foo.md', 'foo2.md');
    
    bool $flysystem->delete('file.md');
    
    bool $flysystem->has('file.md');
    
    string|false $flysystem->read('file.md');
    
    array $flysystem->listContents();
    
    array $flysystem->getMetadata('file.md');
    
    int $flysystem->getSize('file.md');
    
    string $flysystem->getAdapter()->getUrl('file.md'); 
    
    string $flysystem->getMimetype('file.md');
    
    int $flysystem->getTimestamp('file.md');
    

    Plugins

    use Iidestiny\Flysystem\Oss\Plugins\FileUrl
    
    $flysystem->addPlugin(new FileUrl());
    
    string $flysystem->getUrl('file.md');
    

    第二个扩展包:专门为 Laravel 适配

    该扩展包内部自动依赖了 iidestiny/flysystem-oss 所以两个包不需要重复安装,Laravel 用户直接使用下面这条语句安装就可以.

    $ composer require "iidestiny/laravel-filesystem-oss" -vvv
    

    配置

    config/filesystems.php 添加 oss 配置

    <?php
    
    return [
       'disks' => [
            //...
            'oss' => [
                'driver' => 'oss',
                'access_key' => env('OSS_ACCESS_KEY'),
                'secret_key' => env('OSS_SECRET_KEY'),
                'endpoint'   => env('OSS_ENDPOINT'),
                'bucket'     => env('OSS_BUCKET'),
                'isCName'    => env('OSS_IS_CNAME', false), // 如果 isCname 为 false,endpoint 应配置 oss 提供的域名如:`oss-cn-beijing.aliyuncs.com`,否则为自定义域名,,cname 或 cdn 请自行到阿里 oss 后台配置并绑定 bucket
            ],
            //...
        ]
    ];
    

    使用

    <?php
    
    $disk = Storage::disk('oss');
    
    // 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');
    

    更多方法查看 Laravel 文档 laravel-filesystem-doc

    扩展包开发参考

    5 条回复    2019-01-16 09:03:47 +08:00
    qbhy
        1
    qbhy  
       2019-01-04 14:28:26 +08:00
    flysystem 是不是用了感觉会飞的意思 /手动滑稽
    iidestiny
        2
    iidestiny  
    OP
       2019-01-04 23:29:53 +08:00
    @qbhy 哈哈,应该是的。起飞
    lepig
        3
    lepig  
       2019-01-15 14:45:57 +08:00
    支持一波大佬 总算有好用的 oss 扩展了
    iidestiny
        4
    iidestiny  
    OP
       2019-01-16 09:02:59 +08:00
    @lepig 谢谢支付,如果觉得好用 star 一波,并推荐给朋友。嘿嘿
    iidestiny
        5
    iidestiny  
    OP
       2019-01-16 09:03:47 +08:00
    @lepig 谢谢支持。。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   988 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:59 · PVG 04:59 · LAX 13:59 · JFK 16:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.