摘要:說明本文主要講述了的文件系統的小,邏輯不復雜,主要就是把上的一個文件下載到本地,和下載到中。寫驅動由于沒有驅動,需要自定義下在中寫上名為的驅動同時在注冊下該就行。執行命令后,顯示上文件從上下載到上的文件該邏輯簡單,但很好玩。
說明:本文主要講述了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 Adapterleague/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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/21909.html
摘要:說明本文主要學習的模塊的源碼邏輯,把自己的一點點研究心得分享出來,希望對別人有所幫助。實際上,使用了的重載學習筆記之重載,通過魔術方法調用里的,而這個實際上就是,該中有方法,可以調用。 說明:本文主要學習Laravel的Filesystem模塊的源碼邏輯,把自己的一點點研究心得分享出來,希望對別人有所幫助。總的來說,Filesystem模塊的源碼也比較簡單,Laravel的Illumi...
摘要:源碼解析這個類的源碼主要就是文件的操作和文件屬性的操作,而具體的操作是通過每一個實現的,看其構造函數看以上代碼知道對于操作,實際上是通過的實例來實現的。可以看下的使用上文已經說了,使得對各種的操作變得更方便了,不管是還是得。 說明:本文主要學習下LeagueFlysystem這個Filesystem Abstract Layer,學習下這個package的設計思想和編碼技巧,把自己的一...
摘要:使用了來表示該,該接口也是對的抽象,暴露了一些常用方法判斷是否滿足要求的方法的讀寫相關操作獲取元數據方法操作指針相關方法等等。本篇主要學習下相關使用。后續還會分享相關使用,到時見。 說明:本文主要學習guzzlehttp/guzzle package的使用,該package提供了一套發送HTTP請求API,就像phpunit package, mockery package, symf...
摘要:前言因為項目需求,需要把圖片上傳至阿里云,我的接口和后臺項目是分開的,都使用的框架開發,接入這里就不做討論了,這里主要說一下上傳阿里的問題。 前言 因為項目需求,需要把圖片上傳至阿里云 OSS,我的 Api 接口和后臺項目是分開的,都使用的 laravel 框架開發,Api 接入 OSS 這里就不做討論了,這里主要說一下 laravel-admin 上傳阿里 OSS 的問題。 網上的一...
閱讀 1706·2021-11-24 09:39
閱讀 2489·2021-11-18 10:07
閱讀 3668·2021-08-31 09:40
閱讀 3341·2019-08-30 15:44
閱讀 2637·2019-08-30 12:50
閱讀 3658·2019-08-26 17:04
閱讀 1435·2019-08-26 13:49
閱讀 1271·2019-08-23 18:05