天天看點

OSS移動開發實戰2 (30分鐘快速搭建移動應用上傳回調服務)30分鐘快速搭建移動應用上傳回調服務

上一篇文章我們介紹了如何快速搭建移動應用

參考移動端開發場景流程圖

點選檢視

OSS移動開發實戰2 (30分鐘快速搭建移動應用上傳回調服務)30分鐘快速搭建移動應用上傳回調服務

會負責申請sts憑證,然後使用從應用伺服器取的憑證上傳

負責給android/ios移動應用,生成sts憑證

oss負責處理移動應用的資料請求

對于android/ios移動應來說,移動應用隻需要執行操作1(申請sts憑證),就能調用多次5(使用該sts憑證上傳資料到oss)。這樣就導緻了應用伺服器根本不知道使用者都上傳了哪些資料 ,如果那麼作為該app的開發者,就沒法對應用上傳資料進行管理。是以,有什麼問題能讓應用伺服器感覺到android/ios移動應用上傳的資料呢?

通過使用oss的上傳回調服務,就能解決上述問題,如下圖:

OSS移動開發實戰2 (30分鐘快速搭建移動應用上傳回調服務)30分鐘快速搭建移動應用上傳回調服務

即oss在收到android/ios移動的資料(第5步)和在傳回使用者上傳結果(第6步)之間,觸發一個上傳回調工作。即第5.5步。先回調使用者伺服器,然後得到應用伺服器傳回的内容,将這個内容傳回給android/ios移動應用。

可以參考一下callback api文檔

基本資訊如下表:

系統變量

含義

bucket

移動應用上傳到哪個存儲空間

object

移動應用上傳到oss儲存的檔案名

etag

該上傳的檔案的etag,即傳回給使用者的etag字段

size

該上傳的檔案的大小

mimetype

資源類型

imageinfo.height

圖檔高度

imageinfo.width

圖檔寬度

imageinfo.format

圖檔格式,如jpg、png,隻以識别圖檔

傳回上述變量的一個或者多個,傳回内容格式形式在android/ios上傳時指定

如:假如我是一個開發者,我想知道目前使用者所使用的app版本、目前使用者所在的作業系統版本、使用者的gps資訊、使用者的手機型号。那麼我可以在android/ios端上傳檔案時,指定上述自定義參數 ,如x:version指定app版本,x:system指定作業系統版本,x:gps指定gps資訊,x:phone指定手機型号

這些值,會在android/ios移動應用上傳到oss時,附帶上。然後oss,會把這些值,放到callbackbody裡面,一起發給應用伺服器。這樣應用伺服器就能收到這些資訊,達到資訊傳遞的目的。

要讓oss在接收上傳請求時,觸發上傳回調,那麼移動應用必須在構造上傳請求,必須把要兩個内容指定到上傳請求裡面。這兩個内容如下:

要回調到哪個伺服器callbackurl,如上一點提到的http://abc.com/callback.php,注意這個位址必須是公網能夠通路的

上傳回調給應用伺服器的内容callbackbody。可以是上述oss傳回應用伺服器系統變量的一個或者多個。

舉一個示例。假如我的使用者伺服器上傳回調位址是:http://abc.com/callback.php。

我想擷取手機上傳的檔案名字,檔案的大小,并且我定義了photo變量是指手機型号。system是作業系統版本

你必須要有部署一個可以接收post請求的服務,這個服務必須有公網位址如www.abc.com/callback.php(或者外網ip也可以),不然oss沒有辦法通路到這個位址。

你要給oss正确的傳回,傳回格式必須是json格式,内容自定義。因為oss會把應用伺服器傳回的内容,原封不動地傳回給android/ios移動應用。(切記,傳回給oss的response header一定要加上content-length這個頭部)

本教程在後續内容,為大家準備了多個語言版本的示例, 下載下傳及運作方法在本教程的最後。

應用伺服器收到oss的請求,抓包的請求如下(這個結果會根據不同人設定的不同url和回調内容會有不同)

之是以要判斷這個請求是來自oss,是因為如果你的回調伺服器被人惡意攻擊了,别人惡意回調你的應用伺服器,導緻應用伺服器收到一些非法的請求,影響正常邏輯。

判斷的方法主要是利用oss給應用伺服器傳回的頭部内容中, x-oss-pub-key-url,authorization這兩個參數進行rsa校驗。隻有通過rsa校驗的請求,才能說明這個請求是來自oss,本教程提供的示例程式都有實作的示例,大家可以參考。

應用伺服器在校驗這個請求是來自oss後(這一步不是必要的),因為android/ios應用在上傳資料時,指定了回調給應用伺服器的内容格式,如

應用伺服器就可以根據oss的傳回内容,解析得到自己想要得到的資料。得到這個資料後,應用伺服器可以把資料存放起來,友善後續管理。

傳回狀态碼是200;

傳回必須是json格式的内容;

并且傳回的頭部必須帶有content-length這個頭部

有兩種情況:

oss将回調請求發送給應用伺服器,但是應用伺服器接收失敗或者通路不通,oss會傳回給android/ios移動應用203的狀态碼,但是資料已經存放到oss上了。

應用伺服器,接收到oss的回調請求,并且正确傳回了,oss會傳回給android/ios移動應用狀态碼是200, 并把應用伺服器給oss的内容,原封不動地傳回給android/ios移動應用.

示例程式隻是完成了如何檢查應用伺服器收到的簽名, 使用者要自行增加對應用伺服器收到回調的内容的格式解析 。

java版本:

下載下傳位址:點選這裡

運作方法,解壓包運作<code>java -jar oss-callback-server-demo.jar 9000</code>(9000就運作的端口,可以自己指定)

注意這個jar例子在java 1.7運作通過,如果有問題可以自己依據提供的代碼進行修改。這是一個maven項目

php版本:

運作方法:部署到apache環境下,因為php本身語言的特點,取一些資料頭部會依賴于環境。是以可以參考例子基于自己所在環境進行修改

python版本:

運作方法:解壓包直接運作python callback_app_server.py即可,程式自實作了一個簡單的http server,運作該程式可能需要安裝rsa的依賴。

ruby版本:

運作方法: ruby aliyun_oss_callback_server.rb

繼續閱讀