這是一個移動互聯的時代。手機app上傳的資料會越來越多。把資料存儲的問題交給oss, 讓開發者能更加專注于自己的應用邏輯。
那麼怎麼樣基于oss建構一個app存儲系統呢?
本教程就是讓你在30分鐘内搭建一個基于oss的移動應用資料直傳服務,所謂直傳就是移動應用的資料的上傳和下載下傳直接直連oss,隻有控制流走使用者自己的伺服器。
安全的上傳下載下傳方式(臨時,靈活的賦權鑒權),
成本低(這樣使用者不需要準備很多伺服器,因為移動應用直聯雲存儲,隻有控制流走使用者自己的應用伺服器。)
高并發,支援海量使用者(oss有海量的上傳和下載下傳帶寬)
彈性(oss有無限擴容的存儲空間)
友善(可以友善的對接到媒體轉碼服務-視訊多端适配,圖檔處理服務,cdn加速下載下傳等)
本教程就是讓你在30分鐘内搭建一個基于oss的移動應用資料直傳服務
詳細可以參考這裡
android/ios 應用。即最終使用者手機上的app;
oss,即阿裡雲對象存儲,負責存儲app上傳的資料,可以參考官網http://www.aliyun.com/product/oss;
ram/sts負責生成臨時上傳憑證
使用者應用伺服器,即提供該android/ios應用的開發者開發的app背景服務,管理app上傳和下載下傳的token. 甚至是使用者在app上傳資料中繼資料資訊。
android/ios應用不可能直接存儲accesskeyid/accesskeysecret,這樣會存在洩密的風險。是以應用必須向使用者的應用伺服器申請一個臨時上傳憑證(注意下文将此臨時上傳憑證稱為token),注意這個token是有時效性的,如這個token的過期時間是30分鐘(這個時間可以由應用伺服器指定),那麼在該android/ios應用在這30分鐘裡面,使用這個token可以從oss上傳和下載下傳資料, 30分鐘後再重新擷取。
使用者的應用伺服器檢測上述請求的合法性,然後傳回token給應用。
手機拿到這個token後就可以将資料上傳到oss,或者從oss下載下傳資料了。
應用伺服器如何生成這個token,藍色方框
android/ios應用如何取token,紅色方框
本教程實作了一個app,如下,大家可以掃描二維碼,安裝一下示例app程式,這上工具是用android開發。 但是本教程的應用伺服器搭建也适用于ios, 即上述圖藍色的框的内容。
示例程式的最終效果圖如下:
應用伺服器:該移動應用對應的背景應用伺服器。本教程搭建了一個背景應用伺服器:http://oss-demo.aliyuncs.com/app-server/sts.php
上傳bucket,指的是該移動應用要把資料上傳到哪個bucket
區域:指的第二步指定的bucket對應的區域。
我必須開通了oss,并且建立了bucket, 在這個例子裡面的,對應的bucket是 :sdk-demo
我必須開通sts服務。開通sts服務其實是為了如何生成上述所描述的token
我必須搭建這樣一個應用伺服器。這在個事例裡面,我搭建的應用伺服器的位址是:http://oss-demo.aliyuncs.com/app-server/sts.php .
注意這個例子本教程是采用php編寫的,但是事實上,使用者可以選擇自己喜歡的語言進行編寫,如java 、python、 go、ruby、node.js、c#等編寫
如果已經有bucket可以忽略這一步, 如果沒有bucket,建立bucket參考官網
第二步操作,開通sts,可以參考 如下:
(1)要開通sts服務,首先oss登陸官網控制台
(2)登入管理控制台,點選:安全令牌快捷配置
(3)會進入到令牌快捷配置頁面,注意如果沒有開通ram,會彈出開通的對話框。直接點開通,這個要求實名驗證。 做完後跳到本頁面。點選開始授權
(4)點選開始授權後,系統會進行自動授權,請千萬儲存如下圖框住的三個參數
點選儲存ak資訊後,對話框會關閉。儲存好下面标紅的結果3.
儲存這三個參數後。到這一步,sts的開通已經完成了。
注意如果您之前已經點選這個頁面建立了accesskeyid/accesskeysecrte, 彈出的頁面如下:
點選如下圖所示的檢視
點選如下圖所示的建立accesskey
記下如下參數1,2
并記下如下參數3:
為了友善大家開發。 本教程準備了三個語言的版本示例程式 (java、php、ruby)
php: 下載下傳位址
java: 下載下傳位址
ruby: 下載下傳位址
每個語言包下載下傳下來後,都會有一個配置檔案config.json
如下例:
下面對配置進行講解。
accesskeyid填寫上述圖示紅的1的内容,即使用者自己在全
accesskeysecret填寫上述圖檔标紅2的内容
rolearn 填寫上述圖示紅3的内容
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名字。
傳回的格式解析 。
status:表示擷取token的狀态,擷取成功時,傳回值是200
accesskeyid: 表示android/ios應用初始化ossclient擷取的 accesskeyid
accesskeysecret: 表示android/ios應用初始化ossclient擷取accesskeysecret
securitytoken:表示android/ios應用初始化的token
expiration: 表示該token失效的時間。主要在android sdk會自動判斷是否失效,自動擷取token
注意上述這四個變量将構成了一個token。
對于php版本
對于java版本 (依賴于java 1.7)
下面講解一下如何 利用android/ios sdk跟自己的應用伺服器,請求token
android版本
ios版本
具體app從就應用伺服器取token方法,必須寫到public ossfederationtoken getfederationtoken() { } 這個函數裡面。
注意這個函數的邏輯依賴于可以自己設定,但是最終結果必須傳回這樣一個變量 return new ossfederationtoken(ak, sk, token, expiration);
其中ak, sk, token, expiration 必須是從應用伺服器傳回的body擷取的。
在本例子裡,示例如下,注意使用者可以自定義自己的移動應用跟自己應用伺服器之前的協定。
該android示例程式的源碼下載下傳位址
該ios示例程式的源碼下載下傳位址