1. 程式人生 > 程式設計 >Android 阿里雲OSS檔案上傳的實現示例

Android 阿里雲OSS檔案上傳的實現示例

估計有小夥伴看到阿里雲oss的api文件十臉懵逼了,啊哈哈哈,接下來博主就來拯救你了,看完覺得好的就關注博主吧,麼麼麼麼麼噠!!!

想要自己研究阿里雲oss的,博主開啟傳送門給你:阿里雲oss

一、專案匯入阿里雲oss的SDK

方式1:在build檔案新增依賴(博主和官方一致推薦)

dependencies {
	 //阿里雲oss
  implementation 'com.aliyun.dpa:oss-android-sdk:+'
}

方式2:原始碼編譯jar包 原始碼傳送門:官方阿里雲oss原始碼

Android 阿里雲OSS檔案上傳的實現示例

二、OSS所需要的Android許可權

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

三、在專案的proguard-rules.pro檔案加入混淆配置

-keep class com.alibaba.sdk.android.oss.** { *; }
-dontwarn okio.**
-dontwarn org.apache.commons.codec.binary.**

四、重點來了,上程式碼(只有上傳和刪除檔案的,需要其他的功能就需要自己去研究了)

import android.content.Context;
import android.util.Log;

import com.alibaba.sdk.android.oss.ClientConfiguration;
import com.alibaba.sdk.android.oss.ClientException;
import com.alibaba.sdk.android.oss.OSS;
import com.alibaba.sdk.android.oss.OSSClient;
import com.alibaba.sdk.android.oss.ServiceException;
import com.alibaba.sdk.android.oss.callback.OSSCompletedCallback;
import com.alibaba.sdk.android.oss.callback.OSSProgressCallback;
import com.alibaba.sdk.android.oss.common.auth.OSSCredentialProvider;
import com.alibaba.sdk.android.oss.common.auth.OSSStsTokenCredentialProvider;
import com.alibaba.sdk.android.oss.internal.OSSAsyncTask;
import com.alibaba.sdk.android.oss.model.DeleteObjectRequest;
import com.alibaba.sdk.android.oss.model.DeleteObjectResult;
import com.alibaba.sdk.android.oss.model.PutObjectRequest;
import com.alibaba.sdk.android.oss.model.PutObjectResult;

public class AliyunUploadFile {
  private AliyunUploadView aliyunUploadView;
  private OSSCredentialProvider credentialProvider;
  private ClientConfiguration conf;
  private OSS oss;

  public AliyunUploadFile(AliyunUploadView aliyunUploadView) {
    this.aliyunUploadView = aliyunUploadView;
  }

/**
   *
   * @param context 上下文
   * @param AccessKeyId 存取鍵 一般找你們後端拿
   * @param SecretKeyId 金鑰 一般找你們後端拿
   * @param SecurityToken 安全符記 一般找你們後端拿
   * @param endpoint 端點 一般找你們後端拿
   * @param bucketName 桶名 一般找你們後端拿
   * @param objectName 檔名
   * @param uploadFilePath 檔案路徑
   */
  public void UploadFile(Context context,String AccessKeyId,String SecretKeyId,String SecurityToken,String endpoint,String bucketName,String objectName,String uploadFilePath) {

    credentialProvider = new OSSStsTokenCredentialProvider(AccessKeyId,SecretKeyId,SecurityToken);
    conf = new ClientConfiguration();
    conf.setConnectionTimeout(15 * 1000); // 連線超時,預設15秒
    conf.setSocketTimeout(15 * 1000); // socket超時,預設15秒
    conf.setMaxConcurrentRequest(5); // 最大併發請求數,預設5個
    conf.setMaxErrorRetry(2); // 失敗後最大重試次數,預設2次
    oss = new OSSClient(context,endpoint,credentialProvider,conf);

    // 構造上傳請求。
    PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName,objectName,uploadFilePath);

    // 非同步上傳時可以設定進度回撥。
    putObjectRequest.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
      @Override
      public void onProgress(PutObjectRequest request,long currentSize,long totalSize) {

      }
    });

    OSSAsyncTask ossAsyncTask = oss.asyncPutObject(putObjectRequest,new OSSCompletedCallback<PutObjectRequest,PutObjectResult>() {
      @Override
      public void onSuccess(PutObjectRequest request,PutObjectResult result) {
        aliyunUploadView.UploadSuccess(oss.presignPublicObjectURL(bucketName,objectName));
      }

      @Override
      public void onFailure(PutObjectRequest request,ClientException clientExcepion,ServiceException serviceException) {
        // 請求異常。
        if (clientExcepion != null) {
          // 本地異常,如網路異常等。
          clientExcepion.printStackTrace();
          Log.e("123",clientExcepion+"");
          aliyunUploadView.Uploaddefeated("網路異常");
        }

        if (serviceException != null) {
          // 服務異常。
          Log.e("123",serviceException+"");
          aliyunUploadView.Uploaddefeated("服務異常");
        }
      }
    });

    // ossAsyncTask.cancel(); // 可以取消任務
    // ossAsyncTask.waitUntilFinished(); // 等待任務完成
  }

  public void DeleteFile(Context context,String objectName) {

    credentialProvider = new OSSStsTokenCredentialProvider(AccessKeyId,conf);

    // 建立刪除請求。
    DeleteObjectRequest delete = new DeleteObjectRequest(bucketName,objectName);
    // 非同步刪除。
    OSSAsyncTask deleteTask = oss.asyncDeleteObject(delete,new OSSCompletedCallback<DeleteObjectRequest,DeleteObjectResult>() {
      @Override
      public void onSuccess(DeleteObjectRequest request,DeleteObjectResult result) {

      }

      @Override
      public void onFailure(DeleteObjectRequest request,ServiceException serviceException) {
        // 請求異常。
        if (clientExcepion != null) {
          // 本地異常,如網路異常等。
          clientExcepion.printStackTrace();

        }
        if (serviceException != null) {
          // 服務異常。

        }
      }
    });

    // deleteTask.cancel(); // 可以取消任務
    // deleteTask.waitUntilFinished(); // 等待任務完成
  }
  
	public interface AliyunUploadView {
  	void UploadSuccess(String url);

  	void Uploaddefeated(String error);
	}
}

到此這篇關於Android 阿里雲OSS檔案上傳的實現示例的文章就介紹到這了,更多相關Android 阿里雲OSS檔案上傳內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!