资讯专栏INFORMATION COLUMN

Laravel学习笔记之Filesystem-从Dropbox中下载文件到AWS S3

tylin / 530人阅读

摘要:说明本文主要讲述了的文件系统的小,逻辑不复杂,主要就是把上的一个文件下载到本地,和下载到中。写驱动由于没有驱动,需要自定义下在中写上名为的驱动同时在注册下该就行。执行命令后,显示上文件从上下载到上的文件该逻辑简单,但很好玩。

说明:本文主要讲述了Laravel的文件系统Filesystem的小Demo,逻辑不复杂,主要就是把Dropbox上的一个文件下载到本地local,和下载到AWS S3中。用到的文件库filesystem主要是:league/flysystem,Laravel中的illuminate/filesystem模块也仅仅是对该库做了一个简单的封装。这个小Demo作为小练习玩玩,了解下Laravel的Filesystem。

备注:开发环境为Laravel5.2+MySQL5.7+PHP7,该环境也是我们公司项目环境,使用起来还不错。Dropbox是个类似百度云的存储软件,AWS S3是个类似阿里云RDS的云数据库。

安装Dropbox Adapter和AWS Adapter

league/flysystem官网上已经提供了两个Adapter的安装了:Aws S3 Adapter - SDK V3和Dropbox Adapter,Artisan命令为:

composer require league/flysystem-aws-s3-v3
composer require league/flysystem-dropbox

该两个适配器又依赖于对应的两个SDK包,所以会同时安装好Dropbox和AWS的SDK包。关于Adapter的概念可以查看官网:Core Concepts,上面的文档是个好东西,值得研究研究。

Dropbox和AWS S3配置

Dropbox去Create Apps上新建个APP,然后拿到APP_SECRET和临时的token:

同样的,在AWS S3中新建一个Bucket后,拿到Key和Secret:

然后在配置文件中config/filesystem.php中写上磁盘配置:

"disks" => [

        "local" => [
            "driver" => "local",
            "root"   => storage_path("app"),
        ],

        "public" => [
            "driver"     => "local",
            "root"       => storage_path("app/public"),
            "visibility" => "public",
        ],

        "s3" => [
            "driver" => "s3",
            "key"    => env("S3_KEY"),
            "secret" => env("S3_SECRET"),
            "region" => env("S3_REGION"),
            "bucket" => env("S3_BUCKET"),
        ],

        "dropbox" => [
            "driver"       => "dropbox",
            "access_token" => env("DROPBOX_TOKEN"),
            "app_secret"   => env("DROPBOX_SECRET"),
        ],

    ],

同时,在.env文件中写上对应具体指。AWS S3中S3_REGION指该S3位置,我的是东京区,就是ap-northeast-1,同时新建的S3_BUCKET名称是myrightcapitals3。

写Dropbox驱动

由于illuminate/filesystem没有dropbox驱动,需要自定义下:

php artisan make:provider DropboxProvider

在boot()中写上名为dropbox的驱动:

Storage::extend("dropbox", function($app, $config) {
            $client = new DropboxClient($config["access_token"], $config["app_secret"]);
            return new Filesystem(new DropboxAdapter($client));
        });

同时在config/app.php注册下该DropboxProvider就行。

写Artisan命令
php artisan make:console FileSystem/Dropbox --command=filesystem:dropbox

写上命令的处理逻辑,很简单的几个函数调用,不详述了:

namespace AppConsoleCommandsFileSystem;

use IlluminateConsoleCommand;
use Storage;

class Dropbox extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = "filesystem:dropbox";

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = "Download data from dropbox to local and aws s3";

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $content = Storage::disk("dropbox")->get("/AWS/myrightcapital.pem");

        if (Storage::disk("public")->put("myrightcapital.pem", $content)) {
            $this->info("Local download success.");
        } else {
            $this->info("Local download fail.");
        }

        if (Storage::disk("s3")->put("/AWS/myrightcapital.pem", $content)) {
            $this->info("S3 download success.");
        } else {
            $this->error("S3 download fail");
        }
    }
}

执行命令php artisan filesystem:dropbox后,本地storage/app/public文件夹下就会下载一个myrightcapital.pem文件,同时AWS S3上对应的Bucket里也下载了该文件。
执行命令后,显示:

Dropbox上origin文件myrightcapital.pem:

从Dropbox上下载到AWS S3上的myrightcapital.pem文件:

It is working

该demo逻辑简单,但很好玩。

One more thing

推荐一些我司在使用的支持敏捷开发软件,很多东西挺自动化的,真的是DevOps开发运维自动化啊,有兴趣的可以了解了解。首推Atlassian全家桶:Git管理软件SourceTree(可以连Bitbucket、Github和Gitlab,Client APP的),Bitbucket代码存储库(类似Gitlab,搭建自己的私有库,WEB的),JIRA(项目管理工具,WEB的),Confluence(强大的项目文档工具,WEB的),和Bamboo(自动build和deploy平台,WEB的),Hipchat(强大的聊天和通知工具,QQ可不是适合工作中用的哦),这些软件非常不错,但最牛逼的是这些软件是可以相互集成的,如一个issue通过SourceTree的一次commit+push,Bamboo会自动build和deploy代码至服务器,并且Hipchat收到push和deploy信息,用起来会非常爽。还有日志收集工具Logentry和错误通知工具Sentry,尤其Sentry对于收集Laravel程序的错误异常也很清晰,还有Runscope针对API测试和监测的软件,这个大神器,实时监控线上API,有任何异常错误,Sentry会发邮通知我的啊,哈哈。提高生产力,生产工具很重要,不是靠堆人堆出来的啊

贴下平时工作中Hipchat收到的通知日常(QQ真的不是在工作中用的软件啊),代码push/build/deploy都会收到通知,还可以跳转到JIRA中或Bamboo中查看具体issue信息等等功能,是个团队协作利器,推荐下:

总结:本文主要利用一个小demo了解下Laravel的Filesystem,实际上league/flysystem包和illuminate/filesystem包源码也值得研究研究玩一玩。

欢迎关注Laravel-China。

RightCapital招聘Laravel DevOps

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21909.html

相关文章

  • Laravel学习笔记Filesystem源码解析(上)

    摘要:说明本文主要学习的模块的源码逻辑,把自己的一点点研究心得分享出来,希望对别人有所帮助。实际上,使用了的重载学习笔记之重载,通过魔术方法调用里的,而这个实际上就是,该中有方法,可以调用。 说明:本文主要学习Laravel的Filesystem模块的源码逻辑,把自己的一点点研究心得分享出来,希望对别人有所帮助。总的来说,Filesystem模块的源码也比较简单,Laravel的Illumi...

    AlphaGooo 评论0 收藏0
  • Laravel学习笔记Filesystem源码解析(下)

    摘要:源码解析这个类的源码主要就是文件的操作和文件属性的操作,而具体的操作是通过每一个实现的,看其构造函数看以上代码知道对于操作,实际上是通过的实例来实现的。可以看下的使用上文已经说了,使得对各种的操作变得更方便了,不管是还是得。 说明:本文主要学习下LeagueFlysystem这个Filesystem Abstract Layer,学习下这个package的设计思想和编码技巧,把自己的一...

    Luosunce 评论0 收藏0
  • Laravel学习笔记Core Concepts in Guzzle Package——Strea

    摘要:使用了来表示该,该接口也是对的抽象,暴露了一些常用方法判断是否满足要求的方法的读写相关操作获取元数据方法操作指针相关方法等等。本篇主要学习下相关使用。后续还会分享相关使用,到时见。 说明:本文主要学习guzzlehttp/guzzle package的使用,该package提供了一套发送HTTP请求API,就像phpunit package, mockery package, symf...

    singerye 评论0 收藏0
  • laravel-admin 文件上传OSS

    摘要:前言因为项目需求,需要把图片上传至阿里云,我的接口和后台项目是分开的,都使用的框架开发,接入这里就不做讨论了,这里主要说一下上传阿里的问题。 前言 因为项目需求,需要把图片上传至阿里云 OSS,我的 Api 接口和后台项目是分开的,都使用的 laravel 框架开发,Api 接入 OSS 这里就不做讨论了,这里主要说一下 laravel-admin 上传阿里 OSS 的问题。 网上的一...

    darkbaby123 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<