全部產品
Search
文件中心

Object Storage Service:快速搭建行動裝置 App直傳服務

更新時間:Mar 20, 2025

本文主要介紹如何基於STS服務在30分鐘內快速搭建一個行動裝置 App資料直傳服務,讓您的行動裝置 App資料上傳與下載直接對接OSS,僅需通過應用伺服器管理控制資訊,實現資料轉送的高效與安全。

為什麼選擇直傳服務

在移動互聯的時代,手機App上傳的資料越來越多。作為開發人員,您可以利用OSS處理各種資料存放區需求,從而更加專註於自己的應用邏輯。基於OSS的行動裝置 App資料直傳服務具有以下優勢:

  • 資料安全:使用靈活的許可權管理機制進行資料的上傳和下載,更加安全。

  • 成本低廉:您不需要準備很多伺服器。行動裝置 App直接連接雲端儲存OSS,只有控制流程串連應用伺服器。

  • 高並發:輕鬆應對高並發訪問,保證使用者體驗。

  • 彈性擴容:儲存空間隨需擴充,滿足業務增長需求。

  • 資料處理:無縫整合圖片處理與音視頻轉碼功能,資料處理更靈活。

前提條件

如何進行行動裝置 App直傳

行動裝置 App直傳服務的開發流程如下:

實現步驟如下:

  1. 行動裝置 App向商務服務器請求臨時訪問憑證。

    說明

    Android和iOS應用不能直接儲存AccessKey,這樣會存在資料泄露的風險。因此,應用可以向使用者的應用伺服器申請一個STS憑證。這個STS憑證是有時效性的,如果STS憑證的到期時間是30分鐘(由應用伺服器指定),那麼在這30分鐘裡,該Android、iOS應用可以使用此Token從OSS上傳和下載資料,30分鐘後需要重新擷取STS憑證。

  2. 商務服務器使用STS SDK調用AssumeRole介面,擷取臨時訪問憑證。

  3. STS產生並返回臨時訪問憑證給商務服務器。

  4. 商務服務器返回臨時訪問憑證給用戶端。

  5. 行動裝置 App使用OSS SDK通過該臨時訪問憑證上傳檔案到OSS。

  6. OSS返回成功響應給用戶端。

操作步驟

本方案使用的ROS模板:mobile-application-direct-transmission-service.yml

步驟一:開通STS服務並配置應用伺服器

一鍵部署

您可以使用Resource Orchestration Service開通STS服務並一鍵配置1個Elastic Compute Service執行個體,然後在Elastic Compute Service執行個體上部署應用伺服器源碼。使用Resource Orchestration Service快速開通STS服務並配置應用伺服器的操作步驟如下。

  1. 開啟一鍵配置模板連結

  2. Resource Orchestration Service控制台,輸入資源棧名稱,設定新購ECS的可用性區域、執行個體類型、系統硬碟類型、執行個體密碼,然後單擊建立

    資源棧的資源棧資訊頁簽下的狀態顯示建立中

  3. 資源棧的狀態顯示建立成功後,單擊輸出頁簽,查看一鍵部署的應用伺服器位址。

手動部署

一、在存取控制建立RAM使用者

首先,建立一個RAM使用者,並擷取對應的存取金鑰,作為商務服務器的應用程式的長期身份憑證。

  1. 使用雲帳號或帳號管理員登入RAM控制台

  2. 在左側導覽列,選擇身份管理 > 使用者

  3. 單擊建立使用者

  4. 輸入登入名稱稱顯示名稱

  5. 訪問方式地區下,選擇使用永久 AccessKey 訪問,然後單擊確定

重要

RAM使用者的AccessKey Secret只在建立時顯示,後續不支援查看,請妥善保管。

  1. 單擊操作下的複製,儲存調用密鑰(AccessKey ID和AccessKey Secret)。

二、在存取控制為RAM使用者授予調用AssumeRole介面的許可權

建立RAM使用者後,需要授予RAM使用者調用STS服務的AssumeRole介面的許可權,使其可以通過扮演RAM角色來擷取臨時身份憑證。

  1. 在左側導覽列,選擇身份管理 > 使用者

  2. 使用者頁面,找到目標RAM使用者,然後單擊RAM使用者右側的添加許可權

  3. 新增授權頁面,選擇AliyunSTSAssumeRoleAccess系統策略。

    說明

    授予RAM使用者調用STS服務AssumeRole介面的固定許可權是AliyunSTSAssumeRoleAccess,與後續擷取臨時訪問憑證以及通過臨時訪問憑證發起OSS請求要求的權限無關。

  4. 單擊確認新增授權

三、在存取控制建立RAM角色

為當前雲帳號建立一個RAM角色,並擷取對應的角色的ARN(Aliyun Resource Name,阿里雲資源名稱),用於RAM使用者之後進行扮演。

  1. 在左側導覽列,選擇身份管理 > 角色

  2. 單擊建立角色,可信實體類型選擇雲帳號

  3. 選擇當前雲帳號,單擊確定

  4. 填寫角色名稱,單擊確定

  5. 在RAM角色管理頁面,單擊複製,儲存角色的ARN。

四、在存取控制建立上傳檔案的權限原則

按照最小授權原則,為RAM角色建立一個自訂權限原則,限制只能向指定OSS的儲存空間進行上傳操作。

  1. 在左側導覽列,選擇許可權管理 > 權限原則

  2. 單擊建立權限原則

  3. 建立權限原則頁面,單擊指令碼編輯,將以下指令碼中的<Bucket名稱>替換為準備工作中建立的Bucket名稱web-direct-upload

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:PutObject",
          "Resource": "acs:oss:*:*:<Bucket名稱>/*"
        }
      ]
    }
  4. 策略配置完成後,單擊繼續編輯基本資料

  5. 基本資料地區,填寫策略名稱稱,然後單擊確定

五、在存取控制為RAM角色授予許可權

為RAM角色授予建立的自訂許可權,以便該RAM角色被扮演時能擷取所需的許可權。

  1. 在左側導覽列,選擇身份管理 > 角色

  2. 角色頁面,找到目標RAM角色,然後單擊RAM角色右側的新增授權

  3. 新增授權頁面下,選擇自訂策略,選擇已建立的自訂權限原則。

  4. 單擊確定

六、建立ECS執行個體作為商務服務器

建立一台ECS執行個體作為商務服務器,用於產生臨時身份憑證。

說明

在實際部署時,您可以將調用STS服務的介面整合到自己的商務服務器的介面中,而無需建立該ECS執行個體。

參數

樣本值

付費類型

隨用隨付

地區

華東1(杭州)

公網 IP

分配公網 IPv4 地址

安全性群組

開放HTTP (TCP:80)連接埠

具體步驟,請參見通過控制台使用ECS執行個體(快捷版)

七、在商務服務器擷取臨時身份憑證

在Web應用中,通過在商務服務器整合STS SDK,實現一個擷取臨時STS身份憑證的介面。當這個介面(/get_sts_token)通過HTTP GET方法被訪問時,它會產生一個臨時身份憑證,並將其返回給要求者。

在ECS執行個體上,使用Flask架構快速搭建Web應用,實現一個擷取臨時STS身份憑證的介面的操作樣本如下:

  1. 串連ECS執行個體。

    具體操作,請參見串連ECS執行個體

  2. 安裝Python3

  3. 建立專案檔夾,然後切換到專案目錄。

    mkdir my_web_sample
    cd my_web_sample
  4. 安裝依賴。

    pip3 install Flask
    pip3 install attr
    pip3 install yarl
    pip3 install async_timeout
    pip3 install idna_ssl
    pip3 install attrs
    pip3 install aiosignal
    pip3 install charset_normalizer
    pip3 install alibabacloud_tea_openapi
    pip3 install alibabacloud_sts20150401
    pip3 install alibabacloud_credentials
  5. 編寫後端代碼。

    1. 建立一個main.py檔案。

    2. 在這個檔案中,添加以下Python代碼。

      import json
      from flask import Flask, render_template
      from alibabacloud_tea_openapi.models import Config
      from alibabacloud_sts20150401.client import Client as Sts20150401Client
      from alibabacloud_sts20150401 import models as sts_20150401_models
      from alibabacloud_credentials.client import Client as CredentialClient
      
      app = Flask(__name__)
      
      # 將<YOUR_ROLE_ARN>替換為RAM角色的ARN。
      role_arn_for_oss_upload = '<YOUR_ROLE_ARN>'
      # 設定為STS服務的地區,例如cn-hangzhou。
      region_id = 'cn-hangzhou'
      
      @app.route("/")
      def hello_world():
          return render_template('index.html')
      
      @app.route('/get_sts_token', methods=['GET'])
      def get_sts_token():
          # 初始化 CredentialClient 時不指定參數,代表使用預設憑據鏈。
          # 在本地運行程式時,可以通過環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET 指定 AK;
          # 在 ECS\ECI\Container Service上運行時,可以通過環境變數 ALIBABA_CLOUD_ECS_METADATA 來指定綁定的執行個體節點角色,SDK 會自動換取 STS 臨時憑證。
          config = Config(region_id=region_id, credential=CredentialClient())
          sts_client = Sts20150401Client(config=config)
          assume_role_request = sts_20150401_models.AssumeRoleRequest(
              role_arn=role_arn_for_oss_upload,
              # 將<YOUR_ROLE_SESSION_NAME>設定為自訂的會話名稱。
              role_session_name='<YOUR_ROLE_SESSION_NAME>'
          )
          response = sts_client.assume_role(assume_role_request)
          token = json.dumps(response.body.credentials.to_map())
          return token
      app.run(host="0.0.0.0", port=80)
    3. 將代碼中的<YOUR_ROLE_ARN>替換為步驟三擷取的角色ARN。

    4. 將代碼中的<YOUR_ROLE_SESSION_NAME>設定為自訂的會話名稱,例如role_session_test

  6. 使用步驟1擷取的存取金鑰啟動應用程式。

    ALIBABA_CLOUD_ACCESS_KEY_ID=<YOUR_AK_ID> ALIBABA_CLOUD_ACCESS_KEY_SECRET=<YOUR_AK_SECRET> python3 main.py
  7. 在瀏覽器中訪問http://<ECS執行個體公網IP地址>/get_sts_token

    成功返回樣本如下:

    sts token.png

  8. Ctrl + C停止應用程式。

步驟二:下載並安裝行動裝置 App

Android

  1. 下載行動裝置 App源碼

    您可以通過此行動裝置 App上傳圖片到OSS。上傳的方法支援普通上傳和斷點續傳。在網路環境差的情況下,推薦使用斷點續傳。您還可以利用圖片處理服務,對要上傳的圖片進行縮減和加浮水印處理。

  2. 開啟行動裝置 App,配置應用參數

    1. STS鑒權伺服器:填寫步驟一:配置應用伺服器中部署的應用伺服器位址。

    2. 上傳Bucket:該行動裝置 App要把資料上傳到哪個Bucket。

    3. 地區:上傳Bucket所在的地區。

  3. 點擊設定

iOS

  1. 下載行動裝置 App源碼

    您可以通過此行動裝置 App上傳圖片到OSS。上傳的方法支援普通上傳和斷點續傳上傳。在網路環境差的情況下,推薦使用斷點續傳上傳。您還可以利用圖片處理服務,對要上傳的圖片進行縮減和加浮水印處理。

  2. 開啟行動裝置 App,配置應用參數。

    運行demo前,您需要在OSSTestMacros.h檔案中配置必要參數。OSS_BUCKET_PRIVATE、OSS_ENDPOINT、OSS_STSTOKEN_URL。OSS_STSTOKEN_URL:配置為步驟1:配置應用伺服器中部署的應用伺服器位址。

    image

  3. 運行該執行個體。

步驟三:體驗行動裝置 App直傳服務

  1. 設定OSS的object名。點擊上傳,選擇需要上傳的圖片。

  2. 上傳成功後,通過控制台查看上傳結果。