阿里雲團隊努力不懈,力求將最新的技術內容更快地以您最熟悉的語言呈現。本文由簡體中文內容自動轉碼而成,過程無人工干預。阿里雲不保證此自動轉碼的準確性、完整性及時效性。因轉碼造成的任何內容錯誤及因此可能帶來的損失,阿里雲概不負責,敬請見諒。本文内容請以簡體中文版本為準。
全部產品
Search
文件中心

快速入門

更新時間: Oct 19, 2018

以下示範了上傳、下載檔案的基本流程。更多細節用法可以參考本工程的:

sample目錄(包含上傳本地檔案,下載檔案,斷點續傳,設定callback回調等樣本)。點擊查看

也可以直接git clone 工程。通過配置必要的參數:
config

然後運行工程,demo 如下:
sample

STEP-1. 初始化OSSClient

初始化主要完成Endpoint設定、鑒權方式設定、Client參數設定。其中,鑒權方式包含自簽名模式、STS鑒權模式。如果要使用STS鑒權請先閱讀存取控制章節瞭解RAM的基礎知識。以下內容假設您已開通RAM服務並瞭解RAM相關內容。瞭解如何獲取子賬戶AccessKeyId,SecretKeyId以及RoleArn資訊。

完善指令檔中AccessKeyId,SecretKeyId以及RoleArn參數資訊。通過python可以啟動一個本機http服務。在用戶端代碼中訪問本地服務從而獲得StsToken.AccessKeyId,StsToken.SecretKeyId以及StsToken.SecurityToken。

更多資訊可查看sample 中sts 使用方式點擊查看

  1. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  2. // 在移動端建議使用STS方式初始化OSSClient。
  3. // 更多資訊可查看sample 中 sts 使用方式(https://github.com/aliyun/aliyun-oss-android-sdk/tree/master/app/src/main/java/com/alibaba/sdk/android/oss/app)
  4. OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider("<StsToken.AccessKeyId>", "<StsToken.SecretKeyId>", "<StsToken.SecurityToken>");
  5. //該配置類如果不設定,會有預設配置,具體可看該類
  6. ClientConfiguration conf = new ClientConfiguration();
  7. conf.setConnectionTimeout(15 * 1000); // 連接逾時,預設15秒
  8. conf.setSocketTimeout(15 * 1000); // socket逾時,預設15秒
  9. conf.setMaxConcurrentRequest(5); // 最大並發請求數,預設5個
  10. conf.setMaxErrorRetry(2); // 失敗後最大重試次數,預設2次
  11. //開啟可以在控制台看到日誌,並且會支援寫入手機sd卡中的一份記錄檔位置在SDCard_path\OSSLog\logs.csv 預設不開啟
  12. //日誌會記錄oss操作行為中的請求資料,返回資料,異常資訊
  13. //例如requestId,response header等
  14. //android_version:5.1 android版本
  15. //mobile_model:XT1085 android手機型號
  16. //network_state:connected 網路狀況
  17. //network_type:WIFI 網路連接類型
  18. //具體的操作行為資訊:
  19. //[2017-09-05 16:54:52] - Encounter local execpiton: //java.lang.IllegalArgumentException: The bucket name is invalid.
  20. //A bucket name must:
  21. //1) be comprised of lower-case characters, numbers or dash(-);
  22. //2) start with lower case or numbers;
  23. //3) be between 3-63 characters long.
  24. //------>end of log
  25. OSSLog.enableLog();
  26. OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);

通過OSSClient發起上傳、下載請求是安全執行緒的,您可以並發執行多個任務。

STEP-2. 上傳檔案

這裡假設您已經在控制台上擁有自己的Bucket,這裡示範如何從把一個本地檔案上傳到OSS:

  1. // 構造上傳請求
  2. PutObjectRequest put = new PutObjectRequest("<bucketName>", "<objectKey>", "<uploadFilePath>");
  3. // 非同步上傳時可以設定進度回調
  4. put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
  5. @Override
  6. public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
  7. Log.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
  8. }
  9. });
  10. OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
  11. @Override
  12. public void onSuccess(PutObjectRequest request, PutObjectResult result) {
  13. Log.d("PutObject", "UploadSuccess");
  14. }
  15. @Override
  16. public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
  17. // 請求異常
  18. if (clientExcepion != null) {
  19. // 本地異常如網路異常等
  20. clientExcepion.printStackTrace();
  21. }
  22. if (serviceException != null) {
  23. // 服務異常
  24. Log.e("ErrorCode", serviceException.getErrorCode());
  25. Log.e("RequestId", serviceException.getRequestId());
  26. Log.e("HostId", serviceException.getHostId());
  27. Log.e("RawMessage", serviceException.getRawMessage());
  28. }
  29. }
  30. });
  31. // task.cancel(); // 可以取消任務
  32. // task.waitUntilFinished(); // 可以等待直到任務完成

STEP-3. 下載指定檔案

下載一個指定object,返回資料的輸入資料流,需要自行處理:

  1. // 構造下載檔案請求
  2. GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectKey>");
  3. OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
  4. @Override
  5. public void onSuccess(GetObjectRequest request, GetObjectResult result) {
  6. // 請求成功
  7. Log.d("Content-Length", "" + getResult.getContentLength());
  8. InputStream inputStream = result.getObjectContent();
  9. byte[] buffer = new byte[2048];
  10. int len;
  11. try {
  12. while ((len = inputStream.read(buffer)) != -1) {
  13. // 處理下載的資料
  14. }
  15. } catch (IOException e) {
  16. e.printStackTrace();
  17. }
  18. }
  19. @Override
  20. public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
  21. // 請求異常
  22. if (clientExcepion != null) {
  23. // 本地異常如網路異常等
  24. clientExcepion.printStackTrace();
  25. }
  26. if (serviceException != null) {
  27. // 服務異常
  28. Log.e("ErrorCode", serviceException.getErrorCode());
  29. Log.e("RequestId", serviceException.getRequestId());
  30. Log.e("HostId", serviceException.getHostId());
  31. Log.e("RawMessage", serviceException.getRawMessage());
  32. }
  33. }
  34. });
  35. // task.cancel(); // 可以取消任務
  36. // task.waitUntilFinished(); // 如果需要等待任務完成