1. 云存盤服務介紹
云存盤是一種可伸縮、免維護的云端存盤服務,您可以用于存盤圖片、音頻、視頻或其他由用戶生成的內容,借助云存盤服務,您可以無需關心存盤服務器的開發、部署、運維、擴容等事務,大大降低了應用使用存盤的門檻,讓您可以專注于應用的業務能力構建,助力您的商業成功,

作業原理:
您的應用客戶端使用云存盤服務提供的 SDK,可以向云存盤服務器上傳檔案,云存盤將您上傳的檔案存盤在默認的存盤實體中,您可以通過 AGC 訪問這些檔案,當然,您還可以使用云存盤 SDK 的 API 執行下載、洗掉、管理檔案等操作,云存盤還可以配合云函式,在云存盤的檔案上傳完成或洗掉成功后觸發云函式執行您想要實作的功能,

典型應用場景:
存盤海量檔案資訊,提供跨平臺高效上傳下載服務
云存盤服務提供簡單易用、功能強大的端/云SDK,實作用戶生成內容的存盤,讓您無需關注云端能力的構建而聚焦業務邏輯開發,

2. 快應用接入云存盤開發流程
開發流程概覽

申請和開通云存盤服務
- 申請云存盤服務
云存盤服務當前仍處于 Beta 開放狀態,在使用此服務前,您需要向 [email protected] 發送申請郵件,申請開通云存盤服務,
郵件標題請使用如下格式:“[云存盤]-[公司名稱]-[開發者帳號ID]-[專案ID]”
- 開通云存盤服務
登錄 AppGallery Connect 網站,點擊“我的專案”,
在專案串列中點擊需要開通云存盤的專案,
選擇“構建 > 云存盤”,點擊“立即開通”,
在引導界面輸入存盤實體名稱和選擇“默認資料處理位置”,選擇“默認安全策略”,
單擊“完成”,開通云存盤成功,
新建Serverless專案
1. 打開快應用 IDE,在歡迎頁點擊登錄,在跳轉的網頁中登錄注冊的帳號,
2. 登錄成功后,IDE 的導航選擇“新建工程 > 快應用·云開發”,選擇關聯應用、模板,設定專案路徑后,點擊“確定”,
將應用配置資訊添加到專案
1. 登錄 AppGallery Connect 網站,選擇“我的專案”,
2. 在專案串列中找到您的專案,并點擊需要集成云存盤服務的快應用,
3. 在“專案設定”頁面中選擇“常規”頁簽,下載組態檔“agconnect-services.json”,
4. 檢查 agconnect-services.json 檔案中 "service > cloudstorage" 標簽中是否已默認配置 default_storage,
"cloudstorage" : {
"default_storage" : "您準備默認使用的存盤實體名稱",
"storage_url" : "https://agc-storage-drcn.platform.dbankcloud.cn"
}
5. 將修改后 agconnect-services.json 拷貝到您快應用專案的 src 目錄下,
集成SDK
1. 執行如下命令安裝云存盤 JS SDK 到您的專案中,
npm install --save @agconnect/[email protected]
2. 在您的專案中匯入 agc 組件,
import agconnect from '@agconnect/api';
import '@agconnect/cloudstorage';
import "@agconnect/instance";
3. 初始化 AGC SDK,
let agConnectConfig = require('./agconnect-services.json');
agconnect.instance().configInstance(agConnectConfig);
4. 初始化存盤實體
const storageManagement = agconnect.cloudStorage();
創建參考
1. 檔案存盤在云端的存盤實體中,存盤方式與本地硬碟中的檔案系統類似,您可以通過檔案的參考進行上傳檔案、獲取檔案的下載地址、洗掉檔案、更新檔案元資料等操作,您也可以通過創建目錄的參考來獲取該目錄下的檔案串列,
如果您需要上傳、洗掉檔案,更新檔案的元資料及獲取檔案的下載地址,均需要創建對應檔案的參考,
2. 初始化成功后,您可通過呼叫 StorageManagement.storageReference 創建 StorageReference 物件的參考,
// storageManagement為已經初始化的cloudStorage實體
const reference = storageManagement.storageReference();
3. 您也可以通過呼叫 StorageManagement.storageReference 并傳入一個完整的云端檔案的地址來創建一個 StorageReference 物件的參考,
let agconnect = this.$app.$def.agc;
//創建存盤示例物件的參考,通過參考呼叫相關的檔案/目錄介面
let ref = agconnect.cloudStorage().storageReference();
let parentPath = this.getParentPath();
const child = ref.child(parentPath);
child.list({ maxResults: 10 }).then((res) => {
this.currentPath = parentPath;
this.selected = '';
this.setList(res);
})
上傳檔案
1. 用戶可以通過參考操作本地設備上的檔案,將檔案上傳到云端的存盤實體中,
2. 呼叫 StorageManagement.storageReference 創建需上傳檔案的參考,傳入檔案在云端預先規劃的檔案地址,
var storageReference = storage.storageReference();
var reference = storageReference.child('images/demo.jpg');
3. 呼叫 StorageReference.put4QuickApp 方法將檔案上傳到存盤實體中,
// uri為本地檔案資源uri標識
var fileMetadata = https://www.cnblogs.com/developer-huawei/p/reference.put4QuickApp(uri);
4. 如果您需要在上傳檔案時為檔案指定自定義屬性,可以使用 StorageReference.put4QuickApp(uri : String, , attribute ?: UploadMetadata) 方法中的 UploadMetadata 屬性,
putFile() {
let that = this;
media.pickFile ({
success: function (data) {
console.log("handling success: " + data.uri);
let agconnect = that.$app.$def.agc;
let ref = agconnect.cloudStorage().storageReference();
let path = that.currentPath + that.getName(data.uri);
const child = ref.child(path);
child.put4QuickApp(data.uri, {
cacheControl: 'no-cache',
//contentDisposition: 'attachment;filename="demo.png"',
contentEncoding: 'identity',
contentLanguage: 'en-US',
//contentType: 'image/png; charset=utf-8',
customMetadata: {
hello: 'kitty'
}
}).then((res) => {
that.result = JSON.stringify(res, null, "\t");
prompt.showToast ({
message: `putFile success`,
duration: 3500,
gravity: 'center'
});
})
},
fail: function (data, code) {
console.log("handling fail, code=" + code);
}
})
},
列舉檔案
1. 云存盤 SDK 支持通過 API 列舉云端某個目錄下的所有檔案或子目錄,
2. 在列舉某個目錄下的檔案或目錄前,先呼叫 StorageManagement.storageReference 創建目錄的參考,例如創建根目錄的參考:
var storageReference = storage.storageReference();
3. 呼叫 StorageReference.listAll 可獲取當前目錄下所有檔案與目錄,
reference.listAll()
.then((res) => {})
.catch((err) => {});
4. 如果需要分頁獲取,可以呼叫 StorageReference.list(options?: ListOptions) 方法,
// pageMarker是獲取分頁串列資訊時下一頁的起始位置
reference.list ({
maxResults: 100,
pageMarker: pageMarker
}).then((res) = >{}).catch((err) = >{});
getList() {
let agconnect = this.$app.$def.agc;
let ref = agconnect.cloudStorage().storageReference();
let path = this.selected === '' ? this.currentPath : this.selected;
const child = ref.child(path);
child.list ({
maxResults: 10
}).then((res) = > {
this.currentPath = path;
this.selected = '';
this.setList(res);
})
},
getListAll() {
let agconnect = this.$app.$def.agc;
let ref = agconnect.cloudStorage().storageReference();
let path = this.selected === '' ? this.currentPath : this.selected;
const child = ref.child(path);
child.listAll().then((res) = > {
this.currentPath = path;
this.selected = '';
this.setList(res);
})
},
獲取檔案的下載地址
1. 檔案已經上傳到云端后,您可以通過呼叫云存盤 SDK 的 API 獲取云端檔案的下載地址,
2. 呼叫 StorageManagement.storageReference 創建需要下載檔案的參考,
var storageReference = storage.storageReference();
var reference = storageReference.child('images/demo.jpg');
3. 呼叫 StorageReference.getDownloadURL 獲取下載地址,
reference.getDownloadURL()
.then(function(downloadURL){})
.catch((err) => {});
4. 您可以通過將上一步獲取的下載地址拷貝到瀏覽器的地址欄下載檔案,或者呼叫快應用下載介面獲取檔案,
getDownloadURL() {
if (this.selected === '' || this.selected.endsWith('/')) {
prompt.showToast ({
message: `only file can getDownloadURL`,
duration: 3500,
gravity: 'center'
});
return;
}
let agconnect = this.$app.$def.agc;
let ref = agconnect.cloudStorage()
.storageReference();
const child = ref.child(this.selected);
child.getDownloadURL().then((res) => {
this.result = res;
prompt.showToast ({
message: `getDownloadURL success`,
duration: 3500,
gravity: 'center'
});
}).catch((err) => {
console.error("getDownloadURL fail");
prompt.showToast ({
message: `getDownloadURL fail`,
duration: 3500,
gravity: 'center'
});
});
var that = this
prompt.showDialog ({
title: '',
message: 'Do you want to download the file and view the content?',
buttons: [{
text: 'yes',
color: '#33dd44'
},
{
text: 'cancel',
color: '#33dd44'
}],
success: function(data) {
console.log("handling callback", data);
if (data.index === 0) {
router.push ({
uri: '/DownloadShow',
params: {
url: that.result
}
})
}
},
cancel: function() {
console.log("cancel");
}
})
}
洗掉檔案
1. 當云端的檔案不需要時,您可以通過呼叫云存盤 SDK 的 API 在應用客戶端洗掉云端的檔案,
2. 呼叫 StorageManagement.storageReference 創建需要洗掉檔案的參考,
var storageReference = storage.storageReference();
var reference = storageReference.child('images/demo.jpg');
3. 呼叫 StorageReference.delete 洗掉云端檔案,
reference.delete()
.then((res) => {})
.catch((err) => {});
注意:洗掉操作不可逆,一旦執行,檔案會被物理洗掉,不可找回,
delete() {
if (this.selected === '' || this.selected.endsWith('/')) {
prompt.showToast ({
message: `only file can be delete`,
duration: 3500,
gravity: 'center'
});
return;
}
let agconnect = this.$app.$def.agc;
let ref = agconnect.cloudStorage().storageReference();
const child = ref.child(this.selected);
child.delete().then((res) => {
prompt.showToast ({
message: `delete success`,
duration: 3500,
gravity: 'center'
});
let result = [];
for (var i in this.list) {
if (this.list[i].path !== this.selected) {
result.push(this.list[i]);
}
}
this.list = result;
this.selected = '';
})
},
元資料管理
1. 在上傳檔案前或者檔案已經上傳到云端,您都可以設定檔案元資料,可設定的檔案元資料包括檔案的自定義屬性,
2. 呼叫 StorageManagement.storageReference 創建檔案的參考,并初始化檔案的 UploadMetadata 實體,
var storageReference = storage.storageReference();
var reference = storageReference.child('images/demo.jpg');
var metadata = https://www.cnblogs.com/developer-huawei/p/{ contentType:'image/jpeg' };
// uri為本地檔案資源uri標識
var fileMetadata = https://www.cnblogs.com/developer-huawei/p/reference.put4QuickApp(uri, metadata);
3.檔案的自定義屬性可以通過 UploadMetadata.customMetadata 設定,
呼叫 StorageReference.updateFileMetadata 采用覆寫的方式將設定的檔案元資料覆寫到云端,
reference.updateFileMetadata(metadata)
.then(function(res){})
.catch((err) => {});
4. 當設定元資料成功后,您可以通過呼叫 StorageReference.getFileMetadata 方法來獲取設定在云端的元資料,
reference.getFileMetadata()
.then((res) => {})
.catch((err) => {});
uploadMetaData() {
if (this.selected === '' || this.selected.endsWith('/')) {
prompt.showToast ({
message: `only file can uploadMetaData`,
duration: 3500,
gravity: 'center'
});
return;
}
let agconnect = this.$app.$def.agc;
let ref = agconnect.cloudStorage().storageReference();
const child = ref.child(this.selected);
child.updateFileMetadata ({
cacheControl: 'no-cache',
contentEncoding: 'identity',
contentLanguage: 'en-US',
customMetadata: {
hello: 'kitty'
}
}).then((res) => {
this.result = JSON.stringify(res, null, '\t');
prompt.showToast ({
message: `uploadMetaData success`,
duration: 3500,
gravity: 'center'
});
})
},
3. AGC 控制臺管理檔案
AGC 的云存盤服務提供可視化的檔案管理和資料分析功能,
檔案管理:除了在應用客戶端通過云存盤SDK的API來管理檔案,您還可以直接在AGC以可視化的方式來進行檔案管理,包括上傳檔案、查看檔案詳情、下載檔案、創建檔案夾、洗掉檔案或檔案夾、創建令牌,
資料分析:您可以在AGC中查看云存盤資料分析情況,
AGC 控制臺目前支持以下功能:
- 上傳檔案
- 創建檔案夾
- 查看檔案詳情
- 下載檔案
- 洗掉檔案或檔案夾
- 創建令牌
- 云存盤資料分析
4. FAQ
配額限制
當您使用的云存盤資源超過免費配額后,則需要付費使用超額的部分,具體請參見服務定價與訂購,

資源限制

Q:是否支持流式檔案上傳?
采用流式上傳檔案沒辦法對檔案進行一致性校驗,容易造成檔案損壞,可采用先接收資料并寫入檔案,然后再通過本地檔案上傳到云端的方式上傳檔案,
Q:云端檔案的命名是否有限制?
滿足命名規范即可,無其他限制,但服務器會按照檔案名的 UTF-8 編碼范圍進行磁區管理,對系統進行水平擴展與動態負載均衡,如果檔案命名規則使用了順序前綴(如時間戳或字母順序),可能導致大量檔案的請求訪問集中于某個特定磁區,造成訪問熱點,熱點磁區上的請求速率受限,訪問時延上升,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/440411.html
標籤:其他
