前言
在之前的文章中筆者分享了在OpenHarmony應(yīng)用程序中集成AppGallery Connect(AGC)五大類體系服務(wù)中構(gòu)建應(yīng)用基礎(chǔ)能力的認(rèn)證服務(wù)、云函數(shù)、云數(shù)據(jù)庫,這些能力的應(yīng)用都能夠提升應(yīng)用程序的快速迭代及上線。本次分享在OpenHarmony中使用AGC的云存儲服務(wù)。
1 環(huán)境
- [DevEco Studio 3.1 Beta1(V3.1.0.200)
- [觸覺智能IDO-EVB3568-V1開發(fā)板
- [自定義teui組件庫
- [端云協(xié)同開發(fā)應(yīng)用創(chuàng)建(包括云函數(shù))
- [端云協(xié)同開發(fā)云數(shù)據(jù)庫
2 云存儲
云存儲隸屬于AGC平臺的構(gòu)建應(yīng)用基礎(chǔ)能力大類,其是一款可伸縮、免維護的云端存儲服務(wù),可用于存儲圖片、音頻、視頻或其他由用戶生成的內(nèi)容。相較于傳統(tǒng)的單體或微服務(wù)架構(gòu),Serverless架構(gòu)可以讓開發(fā)者聚焦于業(yè)務(wù)能力的實現(xiàn),如使用云存儲服務(wù),則無需關(guān)心存儲服務(wù)器的開發(fā)、部署、運維、擴容等事務(wù)。云存儲提供了客戶端和服務(wù)端SDK,開發(fā)者可以通過使用云存儲SDK為已有或現(xiàn)有應(yīng)用實現(xiàn)安全可靠的文件上傳和下載能力。
3 AGC平臺開通云存儲
首次使用云存儲服務(wù)和云函數(shù)、云數(shù)據(jù)庫不同之處是需要手動開通服務(wù),DevEco Studio端云協(xié)同并未在應(yīng)用創(chuàng)建初對云存儲進行開通,僅引入了云存儲開發(fā)需要的依賴包,在端側(cè)Application應(yīng)用程序entry
目錄中的package.json
文件中可查看。
3.1 開通服務(wù)
打開AGC控制臺,在“我的項目”列表中,打開端云協(xié)同開發(fā)應(yīng)用創(chuàng)建(包括云函數(shù))](https://ost.51cto.com/posts/21316)文章中創(chuàng)建的“端云一體化開發(fā)體驗”項目下的AppCloud
端云協(xié)同應(yīng)用,在左側(cè)菜單欄中選擇“Serverless > 云存儲”,進入到云存儲頁面,點擊“立即開通”按鈕開通云存儲服務(wù)。
在開通云存儲界面中輸入存儲實例名稱,并設(shè)置默認(rèn)數(shù)據(jù)處理位置(該項在創(chuàng)建端云協(xié)同開發(fā)之處就已經(jīng)設(shè)置過,此處可忽略)。存儲實例名稱需要滿足以下規(guī)則:
- 名稱以數(shù)字或字母開頭,只能包含英文小寫字母、數(shù)字、"-",且不能以"-"結(jié)尾,長度不能小于3個字符,并且不能超過57個字符。
- 名稱不能是IP地址
- 名稱需要全局唯一,創(chuàng)建后不可修改
輸入存儲實例名稱后,點擊“下一步”按鈕進入默認(rèn)安全策略展示界面,開通時默認(rèn)安全策略時無法修改的,默認(rèn)安全策略將允許經(jīng)過身份驗證的用戶執(zhí)行所有讀寫操作。若需要定制化安全策略,需要開通服務(wù)后,在安全頁簽中配置安全策略,以便于保護用戶數(shù)據(jù)。
點擊“完成”按鈕,開通云存儲服務(wù)成功,服務(wù)開通后AGC將會創(chuàng)建一個默認(rèn)存儲實例,默認(rèn)存儲實例名稱為開發(fā)者開通云存儲服務(wù)時填寫的實例名稱+"-五位隨機數(shù)字字母" 組成。
可以通過云存儲界面中的“新增文件夾”按鈕創(chuàng)建文件夾,“上傳文件”按鈕進行文件上傳。
3.2 安全策略
云存儲提供的安全策略以簡介明了的格式,可以通過授權(quán)的方式,控制用戶對特定路徑下數(shù)據(jù)的訪問。
構(gòu)建安全策略規(guī)則時需要使用到如下兩種數(shù)據(jù)類型:
null
當(dāng)一個值不存在時,使用null
標(biāo)識
// 表示未登錄則無權(quán)查看
allow read: if request.auth != null;
bool
布爾類型,包含true
和false
兩個值
// 表示任何情況下都可訪問
allow read: if true;
云存儲未開發(fā)者提供了模板化的方式來編寫安全規(guī)則,包含如下內(nèi)容:
match
用于識別存儲實例下的文件路徑,也可以使用通配符指向特定路徑下的任意文件allow
用于在滿足指定條件下用戶擁有對該文件路徑的read
和write
權(quán)限read
讀權(quán)限,可以細(xì)分為get
和list
權(quán)限,在設(shè)置時可以根據(jù)業(yè)務(wù)需要進行單個文件讀取設(shè)置,且拒絕大量的查詢。write
寫權(quán)限,可以細(xì)分為create
、update
和delete
權(quán)限,在設(shè)置時可以根據(jù)業(yè)務(wù)需要僅新增,不可更新和刪除。
// 表示實例中文件全部允許讀寫
agc.cloud.storage [
match: /{bucket}/{path=**} {
allow read, write: if true;
}
]
// 表示實例中文件全部不允許讀寫
agc.cloud.storage [
match: /{bucket}/{path=**} {
allow read, write: if false;
}
]
// 文件細(xì)分規(guī)則配置
agc.cloud.storage [
// 匹配splash路徑下的splash.jpg文件
match: /{bucket}/splash/spalsh.jpg {
allow get: if true;
allow list: if false; // 不支持列表查詢
allow write: if request.auth != null
}
// 匹配splash路徑下任意文件
match: /{bucket}/splash/{path=**} {
allow read, write: if true;
}
]
在云存儲界面中,打開安全頁簽進行配置云存儲安全策略。筆者在云存儲中創(chuàng)建了兩個文件夾,splash
用于存放應(yīng)用程序啟動界面顯示圖,此文件夾權(quán)限配置為所有用戶都具有get
單個文件查看權(quán)限,write
需要授權(quán)登錄用戶才可以操作。userspace
用于存放用戶數(shù)據(jù),因此需要登錄授權(quán)才可訪問。
至此,在AGC平臺的云存儲服務(wù)配置完成,若想了解更深層次的操作,諸如跨域設(shè)置、靜態(tài)CDN加速配置,請詳細(xì)閱讀官方文檔云存儲文檔。
4 端側(cè)開發(fā)
使用DevEco Studio(以下簡稱DS)打開之前的AppCloud端云協(xié)同應(yīng)用程序,并打開端側(cè)Application應(yīng)用程序。在端側(cè)DS在創(chuàng)建項目時已經(jīng)引入了云存儲的SDK,但由于云存儲時后續(xù)開通的,需要更新entry/resources/rawfile
文件下的agconnect-services.json
文件,該文件在AGC控制臺項目設(shè)置頁簽中自行下載并替換。在OpenHarmony應(yīng)用程序中使用云存儲流程如下:
4.1 初始化存儲示例
筆者使用的是默認(rèn)示例,需要調(diào)用agconnect.cloudstorage
初始化默認(rèn)實例StorageManagement
對象。
// entry/src/main/ets/service/cloudstorage/CloudStorgaeService.ts
import agconnect from '@hw-agconnect/api-ohos';
import "@hw-agconnect/cloudstorage-ohos";
import { getAGConnect } from '../AgcConfig';
export class CloudStorageService {
// context 上下文;path 文件所在路徑,此處為云數(shù)據(jù)庫中字段值
public static init(context: any, path: string): Promise<string> {
return new Promise((resolve, reject) => {
getAGConnect(context);
const storageManagement = agconnect.cloudStorage();
...
})
}
}
4.2 創(chuàng)建引用
初始化成功后,通過調(diào)用StorageManagement.storageReference
創(chuàng)建StorageReference
對象的引用,可以通過文件的引用進行上傳文件、獲取文件的下載地址、刪除文件、更新文件元數(shù)據(jù)等操作。
// entry/src/main/ets/service/cloudstorage/CloudStorgaeService.ts
import agconnect from '@hw-agconnect/api-ohos';
import "@hw-agconnect/cloudstorage-ohos";
import { getAGConnect } from '../AgcConfig';
export class CloudStorageService {
// context 上下文;path 文件所在路徑,此處為云數(shù)據(jù)庫中字段值
public static init(context: any, path: string): Promise<string> {
return new Promise((resolve, reject) => {
getAGConnect(context);
const storageManagement = agconnect.cloudStorage();
storageManagement.storageReference().then((ret) => {
...
}).catch((err) => {
reject(err)
})
})
}
}
4.3 獲取文件回顯(下載)地址
在AGC控制臺云存儲界面中上傳文件后,調(diào)用StorageManagement.storageReference
創(chuàng)建需要下載文件的引用,并通過StorageReference.getDownloadURL
獲取下載(回顯)地址。
// entry/src/main/ets/service/cloudstorage/CloudStorgaeService.ts
import agconnect from '@hw-agconnect/api-ohos';
import "@hw-agconnect/cloudstorage-ohos";
import { getAGConnect } from '../AgcConfig';
export class CloudStorageService {
// context 上下文;path 文件所在路徑,此處為云數(shù)據(jù)庫中字段值
public static init(context: any, path: string): Promise<string> {
return new Promise((resolve, reject) => {
getAGConnect(context);
const storageManagement = agconnect.cloudStorage();
storageManagement.storageReference().then((ret) => {
ret.child(path).getDownloadURL().then((res) => {
resolve(res)
}).catch((err) => {
reject(err);
})
}).catch((err) => {
reject(err)
})
})
}
}
4.4 顯示圖片
打開應(yīng)用的Splash啟動頁面,AppCloud啟動頁面的數(shù)據(jù)是從云數(shù)據(jù)庫獲取到的值,將AGC平臺云數(shù)據(jù)庫中狀態(tài)為"1"的數(shù)據(jù)backgroundImg
字段值改為splash/splash.jpg
,即為使用云存儲獲取數(shù)據(jù)的文件引用。接著在Splash頁面的aboutToAppear()
方法中繼續(xù)完善業(yè)務(wù)代碼。
...
import { CloudStorageService } from '../services/cloudstorage/CloudStorageService';
@Entry
@Component
struct Splash {
...
aboutToAppear() {
// 云數(shù)據(jù)庫查詢顯示數(shù)據(jù)
CloudDB.query(getContext(this)).then(ret => {
if (ret) {
this.message = JSON.stringify(ret);
// 查詢云存儲中圖片的回顯地址
CloudStorageService.init(getContext(this), ret.backgroundImg).then(res => {
this.message = JSON.stringify(res);
this.result.backgroundImg = res;
this.isSkip = true;
}).catch((err) => {
this.message = JSON.stringify(err)
})
}
})
}
}
4.5 運行應(yīng)用程序
使用觸覺智能IDO-EVB3568-V1開發(fā)板運行應(yīng)用程序,運行效果如下圖所示。
審核編輯 黃宇
-
AGC
+關(guān)注
關(guān)注
0文章
166瀏覽量
52240 -
云存儲
+關(guān)注
關(guān)注
7文章
774瀏覽量
46525 -
SDK
+關(guān)注
關(guān)注
3文章
1057瀏覽量
47315 -
云數(shù)據(jù)庫
+關(guān)注
關(guān)注
0文章
30瀏覽量
2031 -
OpenHarmony
+關(guān)注
關(guān)注
26文章
3804瀏覽量
17816
發(fā)布評論請先 登錄
相關(guān)推薦
OpenHarmonyApp啟動頁后記
如何在IAP程序實現(xiàn)對應(yīng)用程序存儲區(qū)的改寫
OpenHarmony應(yīng)用程序包整體說明
HarmonyOS/OpenHarmony原生應(yīng)用開發(fā)-華為Serverless服務(wù)支持情況(四)
混合云如何實現(xiàn)應(yīng)用程序集成任務(wù)
哪些閃存作為云存儲提供和使用案例
集成混合云存儲在企業(yè)中存在什么意義
集成混合云存儲在企業(yè)有什么意義
不同應(yīng)用程序的存儲IO類型解析

淺析數(shù)字AGC的matlab仿真程序
OH 應(yīng)用程序集成 AGC 認(rèn)證服務(wù)實現(xiàn)郵箱登錄

恒訊科技分析:為什么選擇云存儲?云存儲類型有哪些?
基于OpenHarmony編寫GPIO平臺驅(qū)動和應(yīng)用程序

使用SDAccel開發(fā)計算存儲應(yīng)用程序

評論