V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
oops1900
V2EX  ›  PHP

优雅的 Oss Flysystem 扩展

  •  
  •   oops1900 · Jan 4, 2019 · 3476 views
    This topic created in 2671 days ago, the information mentioned may be changed or developed.

    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 replies    2019-01-16 09:03:47 +08:00
    qbhy
        1
    qbhy  
       Jan 4, 2019
    flysystem 是不是用了感觉会飞的意思 /手动滑稽
    oops1900
        2
    oops1900  
    OP
       Jan 4, 2019
    @qbhy 哈哈,应该是的。起飞
    lepig
        3
    lepig  
       Jan 15, 2019
    支持一波大佬 总算有好用的 oss 扩展了
    oops1900
        4
    oops1900  
    OP
       Jan 16, 2019
    @lepig 谢谢支付,如果觉得好用 star 一波,并推荐给朋友。嘿嘿
    oops1900
        5
    oops1900  
    OP
       Jan 16, 2019
    @lepig 谢谢支持。。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3928 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 05:06 · PVG 13:06 · LAX 22:06 · JFK 01:06
    ♥ Do have faith in what you're doing.