日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用云存储30分钟快速搭建APP

發布時間:2025/5/22 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用云存储30分钟快速搭建APP 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

不管你承認與否,移動互聯的時代已經到來,這是一個移動互聯的時代,手機已經是當今世界上引領潮流的趨勢,大型的全球化企業和中小企業都把APP程序開發納入到他們的企業發展策略當中。

但隨著手機APP上傳的數據會越來越多,任何企業系統、應用的軟件都必須解決這一問題,數據存儲必須以某種方式保存,不能丟失并且能夠有效簡單地使用和更新這些數據。如果開發者自行解決數據存儲的問題,有可能在后期花費在之上的精力是其他方面的數倍,但是如果將數據存儲這一問題交給OSS,那么開發者就可以從中得以解放,更加專注于自己的應用邏輯。

目的

本文的目的就是讓你在30分鐘內搭建一個基于OSS的移動應用數據直傳服務,所謂直傳就是移動應用的數據的上傳和下載直接直連OSS,只有控制流走用戶自己的服務器,并且具有如下特點:

  • 安全的上傳下載方式(臨時,靈活的賦權鑒權),
  • 成本低(這樣用戶不需要準備很多服務器,因為移動應用直聯云存儲,只有控制流走用戶自己的應用服務器。)
  • 高并發,支持海量用戶(OSS有海量的上傳和下載帶寬)
  • 彈性(OSS有無限擴容的存儲空間)
  • 方便(可以方便的對接到媒體轉碼服務-視頻多端適配,圖片處理服務,CDN加速下載等)

架構圖


詳細資料可以參考這里

角色解析

  • 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對應的區域。
  • 示例APP的使用

    可以點擊選擇圖片,然后就把文件上傳到OSS,上傳的方法,支持普通上傳和斷點上傳。注意在一些網絡環境差的環境下,最好用斷點上傳。然后可以利用圖片處理服務,可以對將上傳的圖片進行縮略和加水印處理。初始使用請暫時先不要改應用服務器地址和Bucket名字。

    搭建這樣一個APP上傳和下載的系統 ,需要準備的東西:

    必須開通了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#等編寫

    為帳號開通STS服務

  • 如果已經有bucket可以忽略這一步, 如果沒有bucket,創建Bucket參考官網
  • 第二步操作,開通STS,可以參考 如下:
  • (1)要開通STS服務,首先OSS登陸官網控制臺


    (2)登錄管理控制臺,點擊:安全令牌快捷配置


    (3)會進入到令牌快捷配置頁面,注意如果沒有開通RAM,會彈出開通的對話框。直接點開通,這個要求實名驗證。 做完后跳到本頁面。點擊開始授權


    (4)點擊開始授權后,系統會進行自動授權,請千萬保存如下圖框住的三個參數


    點擊保存AK信息后,對話框會關閉。保存好下面標紅的結果3。


    保存這三個參數后。到這一步,STS的開通已經完成了。

    注意如果您之前已經點擊這個頁面創建了AccessKeyId/AccessKeySecrte, 彈出的頁面如下:


    點擊如下圖所示的查看


    點擊如下圖所示的創建AccessKey


    記下如下參數1,2


    并記下如下參數3:


    保存這三個參數后。到這一步,STS的開通已經完成了。

    講解一下應用服務器的搭建

    為了方便大家開發。 本文準備了三個語言的版本示例程序 (Java、PHP、Ruby)。

    應用服務器代碼示例的下載

    PHP: 下載地址

    Java: 下載地址

    Ruby: 下載地址

    應用服務器示例的配置

    每個語言包下載下來后,都會有一個配置文件config.json。

    如下例:

    {

    "AccessKeyID" : "",

    "AccessKeySecret" : "",

    "RoleArn" : "",

    "TokenExpireTime" : "900",

    "PolicyFile": "policy/all_policy.txt"

    }

    下面對配置進行講解。

  • 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":200,

    "AccessKeyId":"STS.3pYjsdgdgagdasdg",

    "AccessKeySecret":"rpnwO9kvEgetGdrddgsR2YrTtI",

    "Security":"CAES+wMIARKAAZhjH0EUOIhJMQBMjRywXq7MQ/cjLYg80Aho1ek0Jm63XMhr9Oc5s˙?˙?3qaPer8p1YaX1NTDiCFZWFkvlHf1pQhuxfKBc+mRR9KAbHUefqH+rdjZqjTF7p2m1wJXP8S6k+G2MpHrUe6TYBkJ43GhhTVFMuM3BZajY3VjZWOXBIODRIR1FKZjIiEjMzMzE0MjY0NzM5MTE4NjkxMSoLY2xpZGSSDgSDGAGESGTETqOio6c2RrLWRlbW8vKgoUYWNzOm9zczoqOio6c2RrLWRlbW9KEDExNDg5MzAxMDcyNDY4MThSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzMzMTQyNjQ3MzkxMTg2OTExcglzZGstZGVtbzI=",

    "Expiration":"2015-12-12T07:49:09Z",

    }

    • status:表示獲取Token的狀態,獲取成功時,返回值是200
    • AccessKeyId: 表示Android/iOS應用初始化OSSClient獲取的 AccessKeyId
    • AccessKeySecret: 表示Android/iOS應用初始化OSSClient獲取AccessKeySecret
    • SecurityToken:表示Android/iOS應用初始化的Token
    • Expiration: 表示該Token失效的時間。主要在Android SDK會自動判斷是否失效,自動獲取Token

    注意上述這四個變量將構成了一個Token。

    代碼示例的運行方法

    對于PHP版本

    PHP運行的,將包下載 后,然后修改好config.json這個文件。直接運行php sts.php 即能生成Token,將程序部署到指定的地址。

    對于JAVA版本 (依賴于java 1.7)

    下載編譯好的jar 包,下載地址:

    下載后解壓:

    運行方法:java -jar oss-token-server.jar (port)

    如果不指定port(端口), 直接運行java –jar oss-token-server.jar , 程序會監聽7080端口

    如果想讓程序執行在9000端口,運行java –jar oss-token-server.jar 9000 , 其他端口也類似。

    體驗自己的APP上傳應用服務器

  • 把把程序部署起來后,記下應用服務器地址如 :http://abc.com:8080, 將示例程序里面的應用服務器修改成上述地址
  • 選擇自己數據要上傳到哪個bcuket及區域,修改示例APP程序里面相應Bucket及區域
  • 點擊設置按鈕,將配置加載
  • 選擇圖片,設置上傳OSS文件名,上傳。然后就可以在Android上體驗OSS服務了。這樣你就能通Android 示例程序將數據直接上傳到OSS
  • 上傳成功后,可以看一下數據是否在OSS上了
  • 核心代碼解析-OSS初始化

    下面講解一下如何 利用Android/iOS SDK跟自己的應用服務器,請求Token。

    Android版本

    //初始化一個OssService用來上傳下

    public OssService initOSS(String endpoint, String bucket, UIDisplayer displayer) {

    OSSCredentialProvider credentialProvider;

    //使用自己的獲取STSToken的類

    //從應用服務器控件里面讀取應用服務器地址

    String stsServer = ((EditText) findViewById(R.id.stsserver)).getText().toString();

    //STSGetter類,封裝如何跟從應用服務器取數據,必須繼承于OSSFederationCredentialProvider這個類。 取Token這個取決于你所寫的APP跟應用服務器數據的協議設計。

    if (stsServer .equals("")) {

    credentialProvider = new STSGetter();

    }else {

    credentialProvider = new STSGetter(stsServer);

    }

    //獲取控件上的bucket名字

    bucket = ((EditText) findViewById(R.id.bucketname)).getText().toString();

    //初始化OSSClient

    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);

    return new OssService(oss, bucket, displayer);

    }

    iOS版本

    // 初始化一個OSSClient實例

    - (void)ossInit {

    // 構造一個獲取STSToken的憑證提供器

    id<OSSCredentialProvider> credential = [[OSSFederationCredentialProvider alloc] initWithFederationTokenGetter:^OSSFederationToken * {

    // 實現一個函數,同步返回從server獲取到的STSToken

    return [self getFederationToken];

    }];

    // 用endpoint、憑證提供器初始化一個OSSClient

    client = [[OSSClient alloc] initWithEndpoint:endPoint credentialProvider:credential];

    }

    核心代碼解析-移動應用從應用服務器取Token

    具體APP從就應用服務器取Token方法,必須寫到public OSSFederationToken getFederationToken() { } 這個函數里面。

    注意這個函數的邏輯依賴于可以自己設定,但是最終結果必須返回這樣一個變量 return new OSSFederationToken(ak, sk, token, expiration);

    其中ak, sk, token, expiration 必須是從應用服務器返回的Body獲取的。

    在本例子里,示例如下,注意用戶可以自定義自己的移動應用跟自己應用服務器之前的協議。

    Android版本

    public OSSFederationToken getFederationToken() {

    String stsJson;

    OkHttpClient client = new OkHttpClient();

    Request request = new Request.Builder().url(stsServer).build();

    try {

    Response response = client.newCall(request).execute();

    if (response.isSuccessful()) {

    stsJson = response.body().string();

    } else {

    throw new IOException("Unexpected code " + response);

    }

    }

    catch (IOException e) {

    e.printStackTrace();

    Log.e("GetSTSTokenFail", e.toString());

    return null;

    }

    try {

    JSONObject jsonObjs = new JSONObject(stsJson);

    String ak = jsonObjs.getString("AccessKeyId");

    String sk = jsonObjs.getString("AccessKeySecret");

    String token = jsonObjs.getString("SecurityToken");

    String expiration = jsonObjs.getString("Expiration");

    return new OSSFederationToken(ak, sk, token, expiration);

    }

    catch (JSONException e) {

    Log.e("GetSTSTokenFail", e.toString());

    e.printStackTrace();

    return null;

    }}

    iOS版本

    NSURL * url = [NSURL URLWithString:STSServer];

    NSURLRequest * request = [NSURLRequest requestWithURL:url];

    OSSTaskCompletionSource * tcs = [OSSTaskCompletionSource taskCompletionSource];

    NSURLSession * session = [NSURLSession sharedSession];

    NSURLSessionTask * sessionTask = [session dataTaskWithRequest:request

    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

    if (error) {

    [tcs setError:error];

    return;

    }

    [tcs setResult:data];

    }];

    [sessionTask resume];

    // 實現這個回調需要同步返回Token,所以要waitUntilFinished

    [tcs.task waitUntilFinished];

    if (tcs.task.error) {

    // 如果網絡請求出錯,返回nil表示無法獲取到Token。該次請求OSS會失敗。

    return nil;

    } else {

    // 從網絡請求返回的內容中解析JSON串拿到Token的各個字段,組成STSToken返回

    NSDictionary * object = [NSJSONSerialization JSONObjectWithData:tcs.task.result

    options:kNilOptions

    error:nil];

    OSSFederationToken * token = [OSSFederationToken new];ni

    token.tAccessKey = [object objectForKey:@"AccessKeyId"];

    token.tSecretKey = [object objectForKey:@"AccessKeySecret"];

    token.tToken = [object objectForKey:@"SecurityToken"];

    token.expirationTimeInGMTFormat = [object objectForKey:@"Expiration"];

    return token;

    }

    OSS相關功能的代碼,可以查看示例程序的實現

    該Android示例程序的源碼下載地址

    該iOS示例程序的源碼下載地址

    應用服務器代碼示例的下載

    PHP: 下載地址

    Java: 下載地址

    Ruby: 下載地址

    總結

    以上是生活随笔為你收集整理的用云存储30分钟快速搭建APP的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。