麻豆午夜精品亚洲国产馆_玉米影视app成人版_亚洲日本电影在线观看_久久国产人妻一区二区免费_欧美日韩变态另类人妻_亚洲熟妇 毛茸茸_色播五月激情五月东京热_91精品三级网在线播放_四虎一区在线观看_色欲天天婬色婬香综合网视频

聰明屋視角

關注互聯網,關注技術開發,透析與分享移動互聯網行業最新動態

快速搭建移動應用直傳服務

時間:2019-02-14 17:28:48    閱讀:65849次 分類:常見問題
本文主要介紹如何基于sts policy的使用規則在30分鐘內搭建一個移動應用數據直傳服務。直傳指的是移動應用數據的上傳和下載直接連接oss,只有控制流...

本文主要介紹如何基于STS Policy的使用規則在30分鐘內搭建一個移動應用數據直傳服務。直傳指的是移動應用數據的上傳和下載直接連接OSS,只有控制流連接自己的服務器。

背景

在移動互聯的時代,手機app上傳的數據越來越多。作為開發者,您可以利用OSS處理各種數據存儲需求,從而更加專注于自己的應用邏輯。

基于OSS的移動應用數據直傳服務具有以下優勢:
  • 數據安全:使用靈活的授權和鑒權方式進行數據的上傳和下載,更加安全。
  • 成本低廉:您不需要準備很多服務器。移動應用直接連接云存儲OSS,只有控制流連接應用服務器。
  • 高并發:支持海量用戶并發訪問。
  • 彈性擴容:無限擴容的存儲空間。
  • 數據處理:和圖片處理以及音視頻轉碼搭配使用,方便靈活地進行數據處理。

下載并安裝移動應用

移動應用源碼的下載地址如下:

您可以通過此移動應用上傳圖片到OSS。上傳的方法支持普通上傳和斷點續傳上傳。在網絡環境差的情況下,推薦使用斷點續傳上傳。您還可以利用圖片處理服務,對要上傳的圖片進行縮略和加水印處理。示例應用的最終效果圖如下:


 
  • 應用服務器:該移動應用對應的后臺應用服務器。請使用步驟2:下載應用服務器代碼示例中提供的應用服務器代碼示例,部署自己的應用服務器。
  • 上傳Bucket:該移動應用要把數據上傳到哪個Bucket。
  • 區域:上傳Bucket所在的地域。

原理介紹

移動應用直傳服務的開發流程圖如下: 
 
角色分析如下:
  • Android/iOS 移動應用:即最終用戶手機上的app,負責從應用服務器申請及使用STS憑證。
  • OSS:即阿里云對象存儲,負責處理移動應用的數據請求。
  • RAM/STS:負責生成臨時上傳憑證,即Token。
  • 應用服務器:即提供該Android/iOS應用的開發者開發的app后臺服務,用于管理app上傳和下載的Token,以及用戶通過app上傳數據的元信息。

實現步驟如下:

  1. 移動應用向應用服務器申請一個臨時上傳憑證。
    說明 Android和iOS應用不能直接存儲AccessKey,這樣會存在數據泄露的風險。所以應用必須向用戶的應用服務器申請一個Token。這個Token是有時效性的,如果Token的過期時間是30分鐘(由應用服務器指定),那么在這30分鐘里,該Android/iOS應用可以使用此Token從OSS上傳和下載數據, 30分鐘后需要重新獲取Token。
  2. 應用服務器檢測上述請求的合法性,然后返回Token給移動應用。
  3. Android/iOS移動應用使用此Token將數據上傳到OSS,或者從OSS下載數據。

以下介紹應用服務器如何生成Token以及Android/iOS移動應用如何獲取Token。

步驟1:創建Bucket并開通STS服務

  1. 開通OSS,并且創建Bucket
  2. 開通STS服務。
    1. 登錄OSS管理控制臺
    2. 在OSS概覽頁中找到基礎配置區域,單擊安全令牌


    3. 進入到安全令牌快捷配置頁面,單擊開始授權
      說明 如果沒有開通RAM,會彈出開通的對話框。單擊 開通。開通完成后單擊 開始授權
    4. 系統進行自動授權。請保存AccessKeyID、AccessKeySecret和RoleArn三個參數。
      • 如果您未創建過AccessKey,系統自動創建AccessKey。請保存AccessKeyId、AccessKeySecret和RoleArn,如下圖所示。


      • 如果您之前已經創建過AccessKey,也可以單擊如下圖所示的查看創建新的AccessKey。

步驟2:下載應用服務器代碼示例

步驟3:修改配置文件

以下例子采用PHP編寫。每個語言的示例代碼下載后,都會有一個配置文件config.json,如下所示:
{ "AccessKeyID" : "", "AccessKeySecret" : "", "RoleArn" : "", "TokenExpireTime" : "900", "PolicyFile": "policy/all_policy.txt" }
相關參數說明如下:
  • AccessKeyID:填寫之前記錄的AccessKeyID。
  • AccessKeySecret:填寫之前記錄的AccessKeySecret。
  • RoleArn:填寫之前記錄的RoleArn。
  • TokenExpireTime:指Android/iOS應用獲取到的Token的失效時間,最小值和默認值均為900s。
  • PolicyFile:該Token所擁有的權限列表的文件,可使用默認值。
    說明

    代碼示例中提供了三種最常用的Token權限文件,位于policy目錄下面。分別是:

    • all_policy.txt:指定該Token擁有該賬號下的所有權限,包括:
      • 創建Bucket
      • 刪除Bucket
      • 上傳文件
      • 下載文件
      • 刪除文件
    • bucket_read_policy.txt:指定該Token擁有該賬號下指定Bucket的讀權限。
    • bucket_read_write_policy.txt:指定了該Token擁有該賬號下指定Bucket的讀寫權限。
    如果您想要指定該Token只對指定的Bucket有讀寫權限, 請把bucket_read_policy.txt和bucket_read_write_policy.txt文件里的$BUCKET_NAME替換成指定的Bucket名稱。

步驟4:運行示例代碼

代碼示例的運行方法如下:
  • 對于PHP版本,將包下載解壓后,修改config.json文件,直接運行php sts.php即能生成Token,將程序部署到指定的應用服務器地址。
  • 對于Java版本(依賴于java 1.7),將包下載解壓后,修改config.json文件,重新打包并運行java -jar app-token-server.jar (port)。如果不指定port(端口),直接運行java -jar app-token-server.jar,程序會監聽7080端口。

返回的數據格式解析如下:

//正確返回 { "StatusCode":200, "AccessKeyId":"STS.3p***dgagdasdg", "AccessKeySecret":"rpnwO9***tGdrddgsR2YrTtI", "SecurityToken":"CAES+wMIARKAAZhjH0EUOIhJMQBMjRywXq7MQ/cjLYg80Aho1ek0Jm63XMhr9Oc5s˙?˙?3qaPer8p1YaX1NTDiCFZWFkvlHf1pQhuxfKBc+mRR9KAbHUefqH+rdjZqjTF7p2m1wJXP8S6k+G2MpHrUe6TYBkJ43GhhTVFMuM3BZajY3VjZWOXBIODRIR1FKZjIiEjMzMzE0MjY0NzM5MTE4NjkxMSoLY2xpZGSSDgSDGAGESGTETqOio6c2RrLWRlbW8vKgoUYWNzOm9zczoqOio6c2RrLWRlbW9KEDExNDg5MzAxMDcyNDY4MThSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzMzMTQyNjQ3MzkxMTg2OTExcglzZGstZGVtbzI=", "Expiration":"2017-12-12T07:49:09Z",
} //錯誤返回 { "StatusCode":500, "ErrorCode":"InvalidAccessKeyId.NotFound", "ErrorMessage":"Specified access key is not found." }
正確返回的五個變量構成一個Token:
  • StatusCode:獲取Token的狀態,獲取成功時,返回值是200。
  • AccessKeyId:Android/iOS移動應用初始化OSSClient獲取的 AccessKeyId。
  • AccessKeySecret:Android/iOS移動應用初始化OSSClient獲取AccessKeySecret。
  • SecurityToken:Android/iOS移動應用初始化的Token。
  • Expiration:該Token失效的時間。Android SDK會自動判斷Token是否失效,如果失效,則自動獲取Token。
錯誤返回說明如下:
  • StatusCode:表示獲取Token的狀態,獲取失敗時,返回值是500。
  • ErrorCode:表示錯誤原因。
  • ErrorMessage:表示錯誤的具體信息描述。

步驟5:體驗移動應用直傳服務

  1. 部署程序后,記下應用服務器地址如http://abc.com:8080,將示例程序里面的應用服務器修改成上述地址。
  2. 選擇數據要上傳到哪個Bcuket及地域,修改示例程序里相應的上傳Bucket區域
  3. 單擊設置,加載配置。
  4. 選擇圖片,設置上傳OSS文件名,上傳圖片。
  5. 上傳成功后,通過控制臺查看上傳結果。

核心代碼解析

OSS初始化的代碼解析如下:

  • Android版本
    // 推薦使用OSSAuthCredentialsProvider,token過期后會自動刷新。 String stsServer = "應用服務器地址,例如http://abc.com:8080" OSSCredentialProvider credentialProvider = new OSSAuthCredentialsProvider(stsServer); //config 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:@"應用服務器地址,例如http://abc.com:8080"];
    client = [[OSSClient alloc] initWithEndpoint:endPoint credentialProvider:credential];


蕪湖市聰明屋智能科技有限公司(原中江網絡),成立于2005年,經過10多年定制開發經驗,積累了大量技術儲備和定制開發經驗,率先創建安徽省內自主研發的云計算平臺,具有大數據、高并發等高強度計算能力,為眾多政府、學校、公安部門、中小企業解決數據計算與管理難題。2013年公司內部專門創建電商服務部,為企業提供全方位電商解決方案與配套服務。多次獲得國家、省市級領導接見,被國內近20家電視臺、報紙媒體爭相報道。至今,聰明屋智能科技服務過上市公司、大型國企、各類私企超800家,為多家公司提供各類政務系統、app開發定制、微信小程序開發定制、智能家居、電商系統、連鎖收銀等技術解決方案服務。同時,聰明屋智能科技在智能硬件方面、區塊鏈應用方面持續投入關注及創新。

聰明屋智能科技