说明:本文主要讲述了Laravel的文件系统Filesystem的小Demo,逻辑不复杂,主要就是把Dropbox上的一个文件下载到本地local,和下载到AWS S3中。用到的文件库filesystem主要是:league/flysystem,Laravel中的illuminate/filesystem模块也仅仅是对该库作了一个简单的封装。这个小Demo做为小练习玩玩,了解下Laravel的Filesystem。php
备注:开发环境为Laravel5.2+MySQL5.7+PHP7
,该环境也是咱们公司项目环境,使用起来还不错。Dropbox是个相似百度云的存储软件,AWS S3是个相似阿里云RDS的云数据库。laravel
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,上面的文档是个好东西,值得研究研究。api
Dropbox去Create Apps上新建个APP,而后拿到APP_SECRET和临时的token:服务器
一样的,在AWS S3中新建一个Bucket后,拿到Key和Secret:app
而后在配置文件中config/filesystem.php中写上磁盘配置:composer
'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。运维
因为illuminate/filesystem没有dropbox驱动,须要自定义下:ide
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就行。
php artisan make:console FileSystem/Dropbox --command=filesystem:dropbox
写上命令的处理逻辑,很简单的几个函数调用,不详述了:
namespace App\Console\Commands\FileSystem; use Illuminate\Console\Command; 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逻辑简单,但很好玩。
推荐一些我司在使用的支持敏捷开发软件,不少东西挺自动化的,真的是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。