本文主要介紹如何基於STS Policy的使用規則在30分鐘內搭建一個行動裝置 App資料直傳服務。直傳指的是行動裝置 App資料的上傳和下載直接連接OSS,只有控制流程串連自己的伺服器。
前提條件
背景資訊
在移動互聯的時代,手機App上傳的資料越來越多。作為開發人員,您可以利用OSS處理各種資料存放區需求,從而更加專註於自己的應用邏輯。
基於OSS的行動裝置 App資料直傳服務具有以下優勢:
資料安全:使用靈活的授權和鑒權方式進行資料的上傳和下載,更加安全。
成本低廉:您不需要準備很多伺服器。行動裝置 App直接連接雲端儲存OSS,只有控制流程串連應用伺服器。
高並發:支援海量使用者並發訪問。
彈性擴容:無限擴容的儲存空間。
資料處理:和圖片處理以及音視頻轉碼搭配使用,方便靈活地進行資料處理。
流程介紹
行動裝置 App直傳服務的開發流程如下:
角色分析如下:
Android/iOS 行動裝置 App:即終端使用者手機上的App,負責從應用伺服器申請及使用STS憑證。
OSS:即阿里雲Object Storage Service,負責處理行動裝置 App的資料請求。
RAM/STS:負責產生臨時上傳憑證,即Token。
應用伺服器:即提供該Android/iOS應用的開發人員開發的App後台服務,用於管理App上傳和下載的Token,以及使用者通過App上傳資料的中繼資料。
實現步驟如下:
行動裝置 App嚮應用伺服器申請一個臨時上傳憑證。
Android和iOS應用不能直接儲存AccessKey,這樣會存在資料泄露的風險。所以應用必須向使用者的應用伺服器申請一個Token。這個Token是有時效性的,如果Token的到期時間是30分鐘(由應用伺服器指定),那麼在這30分鐘裡,該Android、iOS應用可以使用此Token從OSS上傳和下載資料,30分鐘後需要重新擷取Token。
應用伺服器檢測上述請求的合法性,然後返回Token給行動裝置 App。
Android、iOS行動裝置 App使用此Token將資料上傳到OSS,或者從OSS下載資料。
以下介紹應用伺服器如何產生Token以及Android、iOS行動裝置 App如何擷取Token。
操作步驟
步驟1:開通STS服務並配置應用伺服器
您可以使用Resource Orchestration Service開通STS服務並一鍵配置1個Elastic Compute Service執行個體,然後在Elastic Compute Service執行個體上部署應用伺服器源碼。使用Resource Orchestration Service快速開通STS服務並配置應用伺服器的操作步驟如下。
開啟一鍵配置模板連結。
在資源編排 ROS控制台,輸入資源棧名稱,設定新購ECS的可用性區域、執行個體類型、系統硬碟類型、執行個體密碼,然後單擊創建。
資源棧的資源棧資訊頁簽下的狀態顯示建立中。
資源棧的狀態顯示建立成功後,單擊輸出頁簽,查看一鍵部署的Elastic Compute Service執行個體。
步驟2:下載並安裝行動裝置 App
下載行動裝置 App源碼。
開啟行動裝置 App,配置應用參數。
應用伺服器:填寫步驟1:配置應用伺服器中部署的應用伺服器位址。
上傳Bucket:該行動裝置 App要把資料上傳到哪個Bucket。
地區:上傳Bucket所在的地區。
OSS檔案名稱:需要包含應用伺服器Policy設定檔裡指定的首碼。
單擊設定。
步驟3:體驗行動裝置 App直傳服務
開啟行動裝置 App。
單擊選擇圖片,選擇需要上傳的圖片,並設定OSS檔案名稱。
上傳成功後,通過控制台查看上傳結果。
核心代碼解析
OSS初始化的代碼解析如下。
Android
// 推薦使用OSSAuthCredentialsProvider,Token到期後會自動重新整理。
String stsServer = "應用伺服器位址,例如https://example.com:8080"
OSSCredentialProvider credentialProvider = new OSSAuthCredentialsProvider(stsServer);
// 完成以下配置項。
ClientConfiguration conf = new ClientConfiguration();
conf.setConnectionTimeout(15 * 1000); // 連線逾時時間,預設15秒。
conf.setSocketTimeout(15 * 1000); // Socket逾時時間,預設15秒。
conf.setMaxConcurrentRequest(5); // 最大並發請求數,預設5個。
conf.setMaxErrorRetry(2); // 失敗後最大重試次數,預設2次。
OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider, conf);
iOS
OSSClient * client;
...
// 推薦使用OSSAuthCredentialProvider,Token到期後會自動重新整理。
id<OSSCredentialProvider> credential = [[OSSAuthCredentialProvider alloc] initWithAuthServerUrl:@"應用伺服器位址,例如https://example.com:8080"];
client = [[OSSClient alloc] initWithEndpoint:endPoint credentialProvider:credential];