DevEco Studio端云協(xié)同開(kāi)發(fā)之云存儲(chǔ)

??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??
??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??
前言
在之前的文章中筆者分享了在OpenHarmony應(yīng)用程序中集成AppGallery Connect(AGC)五大類(lèi)體系服務(wù)中構(gòu)建應(yīng)用基礎(chǔ)能力的認(rèn)證服務(wù)、云函數(shù)、云數(shù)據(jù)庫(kù),這些能力的應(yīng)用都能夠提升應(yīng)用程序的快速迭代及上線。本次分享在OpenHarmony中使用AGC的云存儲(chǔ)服務(wù)。
1、環(huán)境
- ??DevEco Studio 3.1 Beta1(V3.1.0.200)??
- ??觸覺(jué)智能IDO-EVB3568-V1開(kāi)發(fā)板??
- 自定義teui組件庫(kù)
- ??端云協(xié)同開(kāi)發(fā)應(yīng)用創(chuàng)建(包括云函數(shù))??
- ??端云協(xié)同開(kāi)發(fā)云數(shù)據(jù)庫(kù)??
2、云存儲(chǔ)
云存儲(chǔ)隸屬于AGC平臺(tái)的構(gòu)建應(yīng)用基礎(chǔ)能力大類(lèi),其是一款可伸縮、免維護(hù)的云端存儲(chǔ)服務(wù),可用于存儲(chǔ)圖片、音頻、視頻或其他由用戶生成的內(nèi)容。相較于傳統(tǒng)的單體或微服務(wù)架構(gòu),Serverless架構(gòu)可以讓開(kāi)發(fā)者聚焦于業(yè)務(wù)能力的實(shí)現(xiàn),如使用云存儲(chǔ)服務(wù),則無(wú)需關(guān)心存儲(chǔ)服務(wù)器的開(kāi)發(fā)、部署、運(yùn)維、擴(kuò)容等事務(wù)。云存儲(chǔ)提供了客戶端和服務(wù)端SDK,開(kāi)發(fā)者可以通過(guò)使用云存儲(chǔ)SDK為已有或現(xiàn)有應(yīng)用實(shí)現(xiàn)安全可靠的文件上傳和下載能力。
3、AGC平臺(tái)開(kāi)通云存儲(chǔ)
首次使用云存儲(chǔ)服務(wù)和云函數(shù)、云數(shù)據(jù)庫(kù)不同之處是需要手動(dòng)開(kāi)通服務(wù),DevEco Studio端云協(xié)同并未在應(yīng)用創(chuàng)建初對(duì)云存儲(chǔ)進(jìn)行開(kāi)通,僅引入了云存儲(chǔ)開(kāi)發(fā)需要的依賴(lài)包,在端側(cè)Application應(yīng)用程序??entry??目錄中的??package.json??文件中可查看。

(1)開(kāi)通服務(wù)
打開(kāi)AGC控制臺(tái),在“我的項(xiàng)目”列表中,打開(kāi)??端云協(xié)同開(kāi)發(fā)應(yīng)用創(chuàng)建(包括云函數(shù))??文章中創(chuàng)建的“端云一體化開(kāi)發(fā)體驗(yàn)”項(xiàng)目下的AppCloud端云協(xié)同應(yīng)用,在左側(cè)菜單欄中選擇“Serverless > 云存儲(chǔ)”,進(jìn)入到云存儲(chǔ)頁(yè)面,點(diǎn)擊“立即開(kāi)通”按鈕開(kāi)通云存儲(chǔ)服務(wù)。

在開(kāi)通云存儲(chǔ)界面中輸入存儲(chǔ)實(shí)例名稱(chēng),并設(shè)置默認(rèn)數(shù)據(jù)處理位置(該項(xiàng)在創(chuàng)建端云協(xié)同開(kāi)發(fā)之處就已經(jīng)設(shè)置過(guò),此處可忽略)。存儲(chǔ)實(shí)例名稱(chēng)需要滿足以下規(guī)則:
- 名稱(chēng)以數(shù)字或字母開(kāi)頭,只能包含英文小寫(xiě)字母、數(shù)字、“-”,且不能以"-"結(jié)尾,長(zhǎng)度不能小于3個(gè)字符,并且不能超過(guò)57個(gè)字符。
- 名稱(chēng)不能是IP地址
- 名稱(chēng)需要全局唯一,創(chuàng)建后不可修改

輸入存儲(chǔ)實(shí)例名稱(chēng)后,點(diǎn)擊“下一步”按鈕進(jìn)入默認(rèn)安全策略展示界面,開(kāi)通時(shí)默認(rèn)安全策略時(shí)無(wú)法修改的,默認(rèn)安全策略將允許經(jīng)過(guò)身份驗(yàn)證的用戶執(zhí)行所有讀寫(xiě)操作。若需要定制化安全策略,需要開(kāi)通服務(wù)后,在安全頁(yè)簽中配置安全策略,以便于保護(hù)用戶數(shù)據(jù)。

點(diǎn)擊“完成”按鈕,開(kāi)通云存儲(chǔ)服務(wù)成功,服務(wù)開(kāi)通后AGC將會(huì)創(chuàng)建一個(gè)默認(rèn)存儲(chǔ)實(shí)例,默認(rèn)存儲(chǔ)實(shí)例名稱(chēng)為開(kāi)發(fā)者開(kāi)通云存儲(chǔ)服務(wù)時(shí)填寫(xiě)的實(shí)例名稱(chēng)+“-五位隨機(jī)數(shù)字字母” 組成。
可以通過(guò)云存儲(chǔ)界面中的“新增文件夾”按鈕創(chuàng)建文件夾,“上傳文件”按鈕進(jìn)行文件上傳。

(2)安全策略
云存儲(chǔ)提供的安全策略以簡(jiǎn)介明了的格式,可以通過(guò)授權(quán)的方式,控制用戶對(duì)特定路徑下數(shù)據(jù)的訪問(wèn)。
構(gòu)建安全策略規(guī)則時(shí)需要使用到如下兩種數(shù)據(jù)類(lèi)型:
- null 當(dāng)一個(gè)值不存在時(shí),使用null標(biāo)識(shí)。
- bool 布爾類(lèi)型,包含true和false兩個(gè)值。
云存儲(chǔ)未開(kāi)發(fā)者提供了模板化的方式來(lái)編寫(xiě)安全規(guī)則,包含如下內(nèi)容:
- match 用于識(shí)別存儲(chǔ)實(shí)例下的文件路徑,也可以使用通配符指向特定路徑下的任意文件。
- allow 用于在滿足指定條件下用戶擁有對(duì)該文件路徑的read和write權(quán)限。
- read 讀權(quán)限,可以細(xì)分為get和list權(quán)限,在設(shè)置時(shí)可以根據(jù)業(yè)務(wù)需要進(jìn)行單個(gè)文件讀取設(shè)置,且拒絕大量的查詢。
- write 寫(xiě)權(quán)限,可以細(xì)分為create、update和delete權(quán)限,在設(shè)置時(shí)可以根據(jù)業(yè)務(wù)需要僅新增,不可更新和刪除。
在云存儲(chǔ)界面中,打開(kāi)安全頁(yè)簽進(jìn)行配置云存儲(chǔ)安全策略。筆者在云存儲(chǔ)中創(chuàng)建了兩個(gè)文件夾,splash用于存放應(yīng)用程序啟動(dòng)界面顯示圖,此文件夾權(quán)限配置為所有用戶都具有g(shù)et單個(gè)文件查看權(quán)限,write需要授權(quán)登錄用戶才可以操作。userspace用于存放用戶數(shù)據(jù),因此需要登錄授權(quán)才可訪問(wèn)。

至此,在AGC平臺(tái)的云存儲(chǔ)服務(wù)配置完成,若想了解更深層次的操作,諸如跨域設(shè)置、靜態(tài)CDN加速配置,請(qǐng)?jiān)敿?xì)閱讀官方文檔-??云存儲(chǔ)文檔??。
4、端側(cè)開(kāi)發(fā)
使用DevEco Studio(以下簡(jiǎn)稱(chēng)DS)打開(kāi)之前的AppCloud端云協(xié)同應(yīng)用程序,并打開(kāi)端側(cè)Application應(yīng)用程序。在端側(cè)DS在創(chuàng)建項(xiàng)目時(shí)已經(jīng)引入了云存儲(chǔ)的SDK,但由于云存儲(chǔ)時(shí)后續(xù)開(kāi)通的,需要更新entry/resources/rawfile文件下的agconnect-services.json文件,該文件在AGC控制臺(tái)項(xiàng)目設(shè)置頁(yè)簽中自行下載并替換。在OpenHarmony應(yīng)用程序中使用云存儲(chǔ)流程如下:

(1)初始化存儲(chǔ)示例
筆者使用的是默認(rèn)示例,需要調(diào)用agconnect.cloudstorage初始化默認(rèn)實(shí)例StorageManagement對(duì)象。
(2)創(chuàng)建引用
初始化成功后,通過(guò)調(diào)用StorageManagement.storageReference創(chuàng)建StorageReference對(duì)象的引用,可以通過(guò)文件的引用進(jìn)行上傳文件、獲取文件的下載地址、刪除文件、更新文件元數(shù)據(jù)等操作。
(3)獲取文件回顯(下載)地址
在AGC控制臺(tái)云存儲(chǔ)界面中上傳文件后,調(diào)用StorageManagement.storageReference創(chuàng)建需要下載文件的引用,并通過(guò)StorageReference.getDownloadURL獲取下載(回顯)地址。
(4)顯示圖片
打開(kāi)應(yīng)用的Splash啟動(dòng)頁(yè)面,AppCloud啟動(dòng)頁(yè)面的數(shù)據(jù)是從云數(shù)據(jù)庫(kù)獲取到的值,將AGC平臺(tái)云數(shù)據(jù)庫(kù)中狀態(tài)為"1"的數(shù)據(jù)backgroundImg字段值改為splash/splash.jpg,即為使用云存儲(chǔ)獲取數(shù)據(jù)的文件引用。接著在Splash頁(yè)面的aboutToAppear()方法中繼續(xù)完善業(yè)務(wù)代碼。
(5)運(yùn)行應(yīng)用程序
使用??觸覺(jué)智能IDO-EVB3568-V1開(kāi)發(fā)板??運(yùn)行應(yīng)用程序,運(yùn)行效果如下圖所示。

??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??






















