Android使用阿里雲OSS存儲文件上傳

build.gradle

中添加依賴

implementation 'com.aliyun.dpa:oss-android-sdk:+'

Config.java

/**
 * Config
 *
 * @author lao
 * @date 2019/10/8
 */
public class Config {

    // To run the sample correctly, the following variables must have valid values.
    // The endpoint value below is just the example. Please use proper value according to your region

    // 訪問的endpoint地址
    public static final String OSS_ENDPOINT = "http://oss-cn-shenzhen.aliyuncs.com";
    //callback 測試地址
    public static final String OSS_CALLBACK_URL = "http://oss-demo.aliyuncs.com:23450";
    // STS 鑑權服務器地址。
    // 或者根據工程sts_local_server目錄中本地鑑權服務腳本代碼啓動本地STS鑑權服務器。
    public static final String STS_SERVER_URL = "http://*****/sts/getsts";//STS 地址

    public static final String BUCKET_NAME = "talkp";
    public static final String OSS_ACCESS_KEY_ID = "倉庫ID";
    public static final String OSS_ACCESS_KEY_SECRET = "祕鑰";

    public static final int DOWNLOAD_SUC = 1;
    public static final int DOWNLOAD_Fail = 2;
    public static final int UPLOAD_SUC = 3;
    public static final int UPLOAD_Fail = 4;
    public static final int UPLOAD_PROGRESS = 5;
    public static final int LIST_SUC = 6;
    public static final int HEAD_SUC = 7;
    public static final int RESUMABLE_SUC = 8;
    public static final int SIGN_SUC = 9;
    public static final int BUCKET_SUC = 10;
    public static final int GET_STS_SUC = 11;
    public static final int MULTIPART_SUC = 12;
    public static final int STS_TOKEN_SUC = 13;
    public static final int FAIL = 9999;
    public static final int REQUESTCODE_AUTH = 10111;
    public static final int REQUESTCODE_LOCALPHOTOS = 10112;
}

 

 

UploadHelper.java

public class UploadHelper {
    private static final String TAG = UploadHelper.class.getSimpleName();
    // 與你們的存儲區域有關係
    public static final String ENDPOINT = "oss-cn-shenzhen.aliyuncs.com";
    // 上傳的倉庫名
    private static final String BUCKET_NAME = "talkp";


    private static OSS getClient() {

        ClientConfiguration conf = new ClientConfiguration();
        conf.setConnectionTimeout(15 * 1000); // connction time out default 15s
        conf.setSocketTimeout(15 * 1000); // socket timeout,default 15s
        conf.setMaxConcurrentRequest(5); // synchronous request number,default 5
        conf.setMaxErrorRetry(2); // retry,default 2
        OSSLog.enableLog(); //write local log file ,path is SDCard_path\OSSLog\logs.csv

        OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(Config.OSS_ACCESS_KEY_ID, Config.OSS_ACCESS_KEY_SECRET, "<StsToken.SecurityToken>");
        OSSPlainTextAKSKCredentialProvider provider = new OSSPlainTextAKSKCredentialProvider(Config.OSS_ACCESS_KEY_ID, Config.OSS_ACCESS_KEY_SECRET);

        OSS oss = new OSSClient(Factory.app(), Config.OSS_ENDPOINT, provider, conf);
        // 明文設置secret的方式建議只在測試時使用,更多鑑權模式請參考後面的`訪問控制`章節
        return oss;
    }


    /**
     * 上傳的最終方法,成功返回則一個路徑
     *
     * @param objKey 上傳上去後,在服務器上的獨立的KEY
     * @param path   需要上傳的文件的路徑
     * @return 存儲的地址
     */
    private static String upload(String objKey, String path) {
        // 構造一個上傳請求
        PutObjectRequest request = new PutObjectRequest(BUCKET_NAME,
                objKey, path);

        try {
            // 初始化上傳的Client
            OSS client = getClient();
            // 開始同步上傳
            PutObjectResult result = client.putObject(request);
            Log.d(TAG, "upload: result=" + result);
            // 得到一個外網可訪問的地址
            String url = client.presignPublicObjectURL(BUCKET_NAME, objKey);
            // 格式打印輸出
            Log.d(TAG, String.format("PublicObjectURL:%s", url));
            return url;
        } catch (Exception e) {
            e.printStackTrace();
            // 如果有異常則返回空
            return null;
        }
    }

    /**
     * 上傳普通圖片
     *
     * @param path 本地地址
     * @return 服務器地址
     */
    public static String uploadImage(String path) {
        String key = getImageObjKey(path);
        return upload(key, path);
    }

    /**
     * 上傳頭像
     *
     * @param path 本地地址
     * @return 服務器地址
     */
    public static String uploadPortrait(String path) {
        String key = getPortraitObjKey(path);
        return upload(key, path);
    }

    /**
     * 上傳音頻
     *
     * @param path 本地地址
     * @return 服務器地址
     */
    public static String uploadAudio(String path) {
        String key = getAudioObjKey(path);
        return upload(key, path);
    }

    /**
     * 分月存儲,避免一個文件夾太多
     *
     * @return yyyyMM
     */
    private static String getDateString() {
        return DateFormat.format("yyyyMM", new Date()).toString();
    }

    // image/201703/dawewqfas243rfawr234.jpg
    private static String getImageObjKey(String path) {
        String fileMd5 = HashUtil.getMD5String(new File(path));
        String dateString = getDateString();
        return String.format("image/%s/%s.jpg", dateString, fileMd5);
    }

    // portrait/201703/dawewqfas243rfawr234.jpg
    private static String getPortraitObjKey(String path) {
        String fileMd5 = HashUtil.getMD5String(new File(path));
        String dateString = getDateString();
        return String.format("portrait/%s/%s.jpg", dateString, fileMd5);
    }

    // audio/201703/dawewqfas243rfawr234.mp3
    private static String getAudioObjKey(String path) {
        String fileMd5 = HashUtil.getMD5String(new File(path));
        String dateString = getDateString();
        return String.format("audio/%s/%s.mp3", dateString, fileMd5);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章