摘要:說(shuō)明本文主要講述了的文件系統(tǒng)的小,邏輯不復(fù)雜,主要就是把上的一個(gè)文件下載到本地,和下載到中。寫驅(qū)動(dòng)由于沒有驅(qū)動(dòng),需要自定義下在中寫上名為的驅(qū)動(dòng)同時(shí)在注冊(cè)下該就行。執(zhí)行命令后,顯示上文件從上下載到上的文件該邏輯簡(jiǎn)單,但很好玩。
說(shuō)明:本文主要講述了Laravel的文件系統(tǒng)Filesystem的小Demo,邏輯不復(fù)雜,主要就是把Dropbox上的一個(gè)文件下載到本地local,和下載到AWS S3中。用到的文件庫(kù)filesystem主要是:league/flysystem,Laravel中的illuminate/filesystem模塊也僅僅是對(duì)該庫(kù)做了一個(gè)簡(jiǎn)單的封裝。這個(gè)小Demo作為小練習(xí)玩玩,了解下Laravel的Filesystem。
備注:開發(fā)環(huán)境為Laravel5.2+MySQL5.7+PHP7,該環(huán)境也是我們公司項(xiàng)目環(huán)境,使用起來(lái)還不錯(cuò)。Dropbox是個(gè)類似百度云的存儲(chǔ)軟件,AWS S3是個(gè)類似阿里云RDS的云數(shù)據(jù)庫(kù)。
安裝Dropbox Adapter和AWS Adapterleague/flysystem官網(wǎng)上已經(jīng)提供了兩個(gè)Adapter的安裝了:Aws S3 Adapter - SDK V3和Dropbox Adapter,Artisan命令為:
composer require league/flysystem-aws-s3-v3 composer require league/flysystem-dropbox
該兩個(gè)適配器又依賴于對(duì)應(yīng)的兩個(gè)SDK包,所以會(huì)同時(shí)安裝好Dropbox和AWS的SDK包。關(guān)于Adapter的概念可以查看官網(wǎng):Core Concepts,上面的文檔是個(gè)好東西,值得研究研究。
Dropbox和AWS S3配置Dropbox去Create Apps上新建個(gè)APP,然后拿到APP_SECRET和臨時(shí)的token:
同樣的,在AWS S3中新建一個(gè)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"), ], ],
同時(shí),在.env文件中寫上對(duì)應(yīng)具體指。AWS S3中S3_REGION指該S3位置,我的是東京區(qū),就是ap-northeast-1,同時(shí)新建的S3_BUCKET名稱是myrightcapitals3。
寫Dropbox驅(qū)動(dòng)由于illuminate/filesystem沒有dropbox驅(qū)動(dòng),需要自定義下:
php artisan make:provider DropboxProvider
在boot()中寫上名為dropbox的驅(qū)動(dòng):
Storage::extend("dropbox", function($app, $config) { $client = new DropboxClient($config["access_token"], $config["app_secret"]); return new Filesystem(new DropboxAdapter($client)); });
同時(shí)在config/app.php注冊(cè)下該DropboxProvider就行。
寫Artisan命令php artisan make:console FileSystem/Dropbox --command=filesystem:dropbox
寫上命令的處理邏輯,很簡(jiǎn)單的幾個(gè)函數(shù)調(diào)用,不詳述了:
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"); } } }
執(zhí)行命令php artisan filesystem:dropbox后,本地storage/app/public文件夾下就會(huì)下載一個(gè)myrightcapital.pem文件,同時(shí)AWS S3上對(duì)應(yīng)的Bucket里也下載了該文件。
執(zhí)行命令后,顯示:
Dropbox上origin文件myrightcapital.pem:
從Dropbox上下載到AWS S3上的myrightcapital.pem文件:
It is working
該demo邏輯簡(jiǎn)單,但很好玩。
One more thing推薦一些我司在使用的支持敏捷開發(fā)軟件,很多東西挺自動(dòng)化的,真的是DevOps開發(fā)運(yùn)維自動(dòng)化啊,有興趣的可以了解了解。首推Atlassian全家桶:Git管理軟件SourceTree(可以連Bitbucket、Github和Gitlab,Client APP的),Bitbucket代碼存儲(chǔ)庫(kù)(類似Gitlab,搭建自己的私有庫(kù),WEB的),JIRA(項(xiàng)目管理工具,WEB的),Confluence(強(qiáng)大的項(xiàng)目文檔工具,WEB的),和Bamboo(自動(dòng)build和deploy平臺(tái),WEB的),Hipchat(強(qiáng)大的聊天和通知工具,QQ可不是適合工作中用的哦),這些軟件非常不錯(cuò),但最牛逼的是這些軟件是可以相互集成的,如一個(gè)issue通過(guò)SourceTree的一次commit+push,Bamboo會(huì)自動(dòng)build和deploy代碼至服務(wù)器,并且Hipchat收到push和deploy信息,用起來(lái)會(huì)非常爽。還有日志收集工具Logentry和錯(cuò)誤通知工具Sentry,尤其Sentry對(duì)于收集Laravel程序的錯(cuò)誤異常也很清晰,還有Runscope針對(duì)API測(cè)試和監(jiān)測(cè)的軟件,這個(gè)大神器,實(shí)時(shí)監(jiān)控線上API,有任何異常錯(cuò)誤,Sentry會(huì)發(fā)郵通知我的啊,哈哈。提高生產(chǎn)力,生產(chǎn)工具很重要,不是靠堆人堆出來(lái)的啊。
貼下平時(shí)工作中Hipchat收到的通知日常(QQ真的不是在工作中用的軟件啊),代碼push/build/deploy都會(huì)收到通知,還可以跳轉(zhuǎn)到JIRA中或Bamboo中查看具體issue信息等等功能,是個(gè)團(tuán)隊(duì)協(xié)作利器,推薦下:
總結(jié):本文主要利用一個(gè)小demo了解下Laravel的Filesystem,實(shí)際上league/flysystem包和illuminate/filesystem包源碼也值得研究研究玩一玩。
歡迎關(guān)注Laravel-China。
RightCapital招聘Laravel DevOps
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/21909.html
摘要:說(shuō)明本文主要學(xué)習(xí)的模塊的源碼邏輯,把自己的一點(diǎn)點(diǎn)研究心得分享出來(lái),希望對(duì)別人有所幫助。實(shí)際上,使用了的重載學(xué)習(xí)筆記之重載,通過(guò)魔術(shù)方法調(diào)用里的,而這個(gè)實(shí)際上就是,該中有方法,可以調(diào)用。 說(shuō)明:本文主要學(xué)習(xí)Laravel的Filesystem模塊的源碼邏輯,把自己的一點(diǎn)點(diǎn)研究心得分享出來(lái),希望對(duì)別人有所幫助。總的來(lái)說(shuō),F(xiàn)ilesystem模塊的源碼也比較簡(jiǎn)單,Laravel的Illumi...
摘要:源碼解析這個(gè)類的源碼主要就是文件的操作和文件屬性的操作,而具體的操作是通過(guò)每一個(gè)實(shí)現(xiàn)的,看其構(gòu)造函數(shù)看以上代碼知道對(duì)于操作,實(shí)際上是通過(guò)的實(shí)例來(lái)實(shí)現(xiàn)的??梢钥聪碌氖褂蒙衔囊呀?jīng)說(shuō)了,使得對(duì)各種的操作變得更方便了,不管是還是得。 說(shuō)明:本文主要學(xué)習(xí)下LeagueFlysystem這個(gè)Filesystem Abstract Layer,學(xué)習(xí)下這個(gè)package的設(shè)計(jì)思想和編碼技巧,把自己的一...
摘要:使用了來(lái)表示該,該接口也是對(duì)的抽象,暴露了一些常用方法判斷是否滿足要求的方法的讀寫相關(guān)操作獲取元數(shù)據(jù)方法操作指針相關(guān)方法等等。本篇主要學(xué)習(xí)下相關(guān)使用。后續(xù)還會(huì)分享相關(guān)使用,到時(shí)見。 說(shuō)明:本文主要學(xué)習(xí)guzzlehttp/guzzle package的使用,該package提供了一套發(fā)送HTTP請(qǐng)求API,就像phpunit package, mockery package, symf...
摘要:前言因?yàn)轫?xiàng)目需求,需要把圖片上傳至阿里云,我的接口和后臺(tái)項(xiàng)目是分開的,都使用的框架開發(fā),接入這里就不做討論了,這里主要說(shuō)一下上傳阿里的問題。 前言 因?yàn)轫?xiàng)目需求,需要把圖片上傳至阿里云 OSS,我的 Api 接口和后臺(tái)項(xiàng)目是分開的,都使用的 laravel 框架開發(fā),Api 接入 OSS 這里就不做討論了,這里主要說(shuō)一下 laravel-admin 上傳阿里 OSS 的問題。 網(wǎng)上的一...
閱讀 1768·2021-11-24 09:39
閱讀 2584·2021-11-18 10:07
閱讀 3792·2021-08-31 09:40
閱讀 3529·2019-08-30 15:44
閱讀 2697·2019-08-30 12:50
閱讀 3710·2019-08-26 17:04
閱讀 1521·2019-08-26 13:49
閱讀 1331·2019-08-23 18:05