日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Laravel5.2之Filesystem-从Dropbox中下载文件到AWS S3

發布時間:2025/3/20 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Laravel5.2之Filesystem-从Dropbox中下载文件到AWS S3 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

?

說明:本文主要講述了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 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邏輯簡單,但很好玩。

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包源碼也值得研究研究玩一玩。

?

轉載于:https://my.oschina.net/botkenni/blog/774559

總結

以上是生活随笔為你收集整理的Laravel5.2之Filesystem-从Dropbox中下载文件到AWS S3的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。