阿里云上传

338 阅读8分钟

本文已参与【新人创作礼】活动,一起开启掘金创作之路

一、导入依赖

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

二、创建上传需要的工具类

1、UploadBean

/**
 * 编写人: 康晨
 * 创建时间: 2021/8/17
 * 功能描述:上传后返回的结果数据
 */

public class UploadBean {

    private String scene;
    private int model;
    private ArrayList<DataBean> data;

    public UploadBean(String scene, Integer model, ArrayList<DataBean> data) {
        this.scene = scene;
        this.model = model;
        this.data = data;
    }

    public String getScene() {
        return scene;
    }

    public void setScene(String scene) {
        this.scene = scene;
    }

    public int getModel() {
        return model;
    }

    public void setModel(int model) {
        this.model = model;
    }

    public List<DataBean> getData() {
        return data;
    }

    public void setData(ArrayList<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
        private String requestId;
        private String key;
        private String bucket;
        private String etag;
        private String location;

        public DataBean(String requestId, String key, String bucket, String etag, String location) {
            this.requestId = requestId;
            this.key = key;
            this.bucket = bucket;
            this.etag = etag;
            this.location = location;
        }

        public String getRequestId() {
            return requestId;
        }

        public void setRequestId(String requestId) {
            this.requestId = requestId;
        }

        public String getKey() {
            return key;
        }

        public void setKey(String key) {
            this.key = key;
        }

        public String getBucket() {
            return bucket;
        }

        public void setBucket(String bucket) {
            this.bucket = bucket;
        }

        public String getEtag() {
            return etag;
        }

        public void setEtag(String etag) {
            this.etag = etag;
        }

        public String getLocation() {
            return location;
        }

        public void setLocation(String location) {
            this.location = location;
        }
    }
}

2、ImageService

/**
 * 创建时间:
 * 作者:康晨
 * 使用图片服务处理图片
 */
public class ImageService {
    private OssService ossService;
    //字体,默认文泉驿正黑,可以根据文档自行更改
    private static final String font = "d3F5LXplbmhlaQ==";

    public ImageService(OssService ossService) {
        this.ossService = ossService;
    }

    //给图片打上文字水印,除了大小字体之外其他都是默认值,有需要更改的可以参考图片服务文档自行调整
    public void textWatermark(String object, String text, int size) {
        String base64Text = Base64.encodeToString(text.getBytes(), Base64.URL_SAFE | Base64.NO_WRAP);

        String queryString = "@400w|watermark=2&type=" + font + "&text=" + base64Text + "&size=" + String.valueOf(size);
        Log.d("TextWatermark", object);
        Log.d("Text", text);
        Log.d("QuerySyring", queryString);

        ossService.asyncGetImage(object + queryString);
    }

    //强制缩放,其他缩放方式可以参考图片服务文档
    public void resize(String object, int width, int height) {
        String queryString = "@" + String.valueOf(width) + "w_" + String.valueOf(height) + "h_1e_1c";

        Log.d("ResizeImage", object);
        Log.d("Width", String.valueOf(width));
        Log.d("Height", String.valueOf(height));
        Log.d("QueryString", queryString);

        ossService.asyncGetImage(object + queryString);
    }

    public void imagePersist(String fromBucket, String fromObjectKey, String toBucket, String toObjectkey, String action){
        ossService.imagePersist(fromBucket,fromObjectKey, toBucket, toObjectkey,action);
    }
}

3、OssService

/**
 * 创建时间:
 * 作者:康晨
 * 功能:上传工具类
 */
public class OssService {

    private OSS mOss;
    private String mBucket;
    private String mCallbackAddress;
    private static String mResumableObjectKey = "resumableObject";
    private ProgressCallback progressCallback;

    public void setProgressCallback(ProgressCallback progressCallback) {
        this.progressCallback = progressCallback;
    }

    //MainActivity.requestTemporarySecret(this);  上传之前需要调用这个,从后台拿id和key

    public OssService(Context context, String bucket) { //上下文和桶名(BUCKET_NAME)
        this.mBucket = bucket;

        OSSCredentialProvider credetialProvider = new OSSFederationCredentialProvider() {
            @Override
            public OSSFederationToken getFederationToken() {
                return new OSSFederationToken(Config.OSS_ACCESS_KEY_ID, Config.OSS_ACCESS_KEY_SECRET,
                        Config.SECURITY_TOKEN, Config.EXPIRATION);

            }
        };

        mOss = new OSSClient(Utils.getUnDestroyContext(context), Config.OSS_ENDPOINT, credetialProvider);
    }

    public void asyncGetImage(String object) {
        final long get_start = System.currentTimeMillis();
        OSSLog.logDebug("get start");
        if ((object == null) || object.equals("")) {
            Log.w("AsyncGetImage", "ObjectNull");
            return;
        }

        OSSLog.logDebug("create GetObjectRequest");
        GetObjectRequest get = new GetObjectRequest(mBucket, object);
        get.setCRC64(OSSRequest.CRC64Config.YES);
        get.setProgressListener(new OSSProgressCallback<GetObjectRequest>() {
            @Override
            public void onProgress(GetObjectRequest request, long currentSize, long totalSize) {
                Log.d("GetObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
                progressCallback.onProgress(request, currentSize, totalSize);
            }
        });
        OSSLog.logDebug("asyncGetObject");
        OSSAsyncTask task = mOss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
            @Override
            public void onSuccess(GetObjectRequest request, GetObjectResult result) {
                // 请求成功
                InputStream inputStream = result.getObjectContent();
                Bitmap bm = BitmapFactory.decodeStream(inputStream);
                progressCallback.onSuccess(request, result);
            }

            @Override
            public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
                progressCallback.onFailure(request, clientExcepion, serviceException);
                String info = "";
                // 请求异常
                if (clientExcepion != null) {
                    // 本地异常如网络异常等
                    clientExcepion.printStackTrace();
                    info = clientExcepion.toString();
                }
                if (serviceException != null) {
                    // 服务异常
                    Log.e("ErrorCode", serviceException.getErrorCode());
                    Log.e("RequestId", serviceException.getRequestId());
                    Log.e("HostId", serviceException.getHostId());
                    Log.e("RawMessage", serviceException.getRawMessage());
                    info = serviceException.toString();
                }
            }
        });
    }


    //普通上传
    public void asyncPutObj(String object, String localFile) {
        OSSLog.logDebug("upload start");

        if (object.equals("")) {
            Log.w("AsyncPutImage", "ObjectNull");
            return;
        }

        File file = new File(localFile);
        if (!file.exists()) {
            Log.w("AsyncPutImage", "FileNotExist");
            Log.w("LocalFile", localFile);
            return;
        }

        // 构造上传请求
        PutObjectRequest put = new PutObjectRequest(mBucket, object, localFile);
        put.setCRC64(OSSRequest.CRC64Config.YES);
        // 异步上传时可以设置进度回调
        put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
            @Override
            public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
                Log.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
                progressCallback.onProgress(request, currentSize, totalSize);

            }
        });

        OSSLog.logDebug(" asyncPutObject ");
        OSSAsyncTask task = mOss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
            @Override
            public void onSuccess(PutObjectRequest request, PutObjectResult result) {
                Log.d("PutObject", "UploadSuccess");

                Log.d("ETag", result.getETag());
                Log.d("RequestId", result.getRequestId());

                long upload_end = System.currentTimeMillis();
                progressCallback.onSuccess(request, result);
            }

            @Override
            public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
                progressCallback.onFailure(request, clientExcepion, serviceException);

                String info = "";
                // 请求异常
                if (clientExcepion != null) {
                    // 本地异常如网络异常等
                    clientExcepion.printStackTrace();
                    info = clientExcepion.toString();
                }
                if (serviceException != null) {
                    // 服务异常
                    Log.e("ErrorCode", serviceException.getErrorCode());
                    Log.e("RequestId", serviceException.getRequestId());
                    Log.e("HostId", serviceException.getHostId());
                    Log.e("RawMessage", serviceException.getRawMessage());
                    info = serviceException.toString();
                }
            }
        });
    }

    // 以异步方式下载指定前缀的文件。
    public void asyncListObjectsWithBucketName() {
        ListObjectsRequest listObjects = new ListObjectsRequest(mBucket);
        // 设置前缀
        listObjects.setPrefix("android");
        listObjects.setDelimiter("/");
        // 设置成功和失败回调。调用异步 API
        OSSAsyncTask task = mOss.asyncListObjects(listObjects, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() {
            @Override
            public void onSuccess(ListObjectsRequest request, ListObjectsResult result) {
                String info = "";
                OSSLog.logDebug("AyncListObjects", "Success!");
                for (int i = 0; i < result.getObjectSummaries().size(); i++) {
                    info += "\n" + String.format("object: %s %s %s", result.getObjectSummaries().get(i).getKey(), result.getObjectSummaries().get(i).getETag(), result.getObjectSummaries().get(i).getLastModified().toString());
                    OSSLog.logDebug("AyncListObjects", info);
                }
                progressCallback.onSuccess(request, result);
            }

            @Override
            public void onFailure(ListObjectsRequest request, ClientException clientExcepion, ServiceException serviceException) {
                progressCallback.onFailure(request, clientExcepion, serviceException);

                // request exception
                if (clientExcepion != null) {
                    // client side exception such as network exception
                    clientExcepion.printStackTrace();
                }
                if (serviceException != null) {
                    // service side exception.
                    OSSLog.logError("ErrorCode", serviceException.getErrorCode());
                    OSSLog.logError("RequestId", serviceException.getRequestId());
                    OSSLog.logError("HostId", serviceException.getHostId());
                    OSSLog.logError("RawMessage", serviceException.getRawMessage());
                }
            }
        });
    }

    // 获取文件的元数据
    public void headObject(String objectKey) {
        // 创建获取文件元数据的请求
        HeadObjectRequest head = new HeadObjectRequest(mBucket, objectKey);

        OSSAsyncTask task = mOss.asyncHeadObject(head, new OSSCompletedCallback<HeadObjectRequest, HeadObjectResult>() {
            @Override
            public void onSuccess(HeadObjectRequest request, HeadObjectResult result) {
                OSSLog.logDebug("headObject", "object Size: " + result.getMetadata().getContentLength());
                OSSLog.logDebug("headObject", "object Content Type: " + result.getMetadata().getContentType());
                progressCallback.onSuccess(request, result);
            }

            @Override
            public void onFailure(HeadObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
                progressCallback.onFailure(request, clientExcepion, serviceException);

                // request exception
                if (clientExcepion != null) {
                    // client side exception,  such as network exception
                    clientExcepion.printStackTrace();
                }
                if (serviceException != null) {
                    // service side exception
                    OSSLog.logError("ErrorCode", serviceException.getErrorCode());
                    OSSLog.logError("RequestId", serviceException.getRequestId());
                    OSSLog.logError("HostId", serviceException.getHostId());
                    OSSLog.logError("RawMessage", serviceException.getRawMessage());
                }
            }
        });
    }

    public void asyncMultipartUpload(String uploadKey, Uri uploadFilePath) {
        MultipartUploadRequest request = new MultipartUploadRequest(mBucket, uploadKey,
                uploadFilePath);
        request.setCRC64(OSSRequest.CRC64Config.YES);
        request.setProgressCallback(new OSSProgressCallback<MultipartUploadRequest>() {

            @Override
            public void onProgress(MultipartUploadRequest request, long currentSize, long totalSize) {
                OSSLog.logDebug("[testMultipartUpload] - " + currentSize + " " + totalSize, false);
                progressCallback.onProgress(request, currentSize, totalSize);

            }
        });
        mOss.asyncMultipartUpload(request, new OSSCompletedCallback<MultipartUploadRequest, CompleteMultipartUploadResult>() {
            @Override
            public void onSuccess(MultipartUploadRequest request, CompleteMultipartUploadResult result) {
                progressCallback.onSuccess(request, result);
            }

            @Override
            public void onFailure(MultipartUploadRequest request, ClientException clientException, ServiceException serviceException) {
                progressCallback.onFailure(request, clientException, serviceException);

            }
        });
    }

    public void asyncResumableUpload(String resumableFilePath) {
        ResumableUploadRequest request = new ResumableUploadRequest(mBucket, mResumableObjectKey, resumableFilePath);
        request.setProgressCallback(new OSSProgressCallback<ResumableUploadRequest>() {
            @Override
            public void onProgress(ResumableUploadRequest request, long currentSize, long totalSize) {
                Log.d("GetObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
                progressCallback.onProgress(request, currentSize, totalSize);

            }
        });
        OSSAsyncTask task = mOss.asyncResumableUpload(request, new OSSCompletedCallback<ResumableUploadRequest, ResumableUploadResult>() {
            @Override
            public void onSuccess(ResumableUploadRequest request, ResumableUploadResult result) {
                progressCallback.onSuccess(request, result);
            }

            @Override
            public void onFailure(ResumableUploadRequest request, ClientException clientException, ServiceException serviceException) {
                progressCallback.onFailure(request, clientException, serviceException);

            }
        });
    }

    // 如果存储桶是私有的,则访问需要签名 URL。
    // 到期时间在签名 URL 中指定。
    public void presignURLWithBucketAndKey(final String objectKey) {
        if (objectKey == null || objectKey == "") {
            ToastUtil.toastLongMessage("请输入objectKey!");
            return;
        }
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    // 获取签名后的url,过期时间为5分钟
                    String url = mOss.presignConstrainedObjectURL(mBucket, objectKey, 5 * 60);
                    OSSLog.logDebug("signContrainedURL", "get url: " + url);
                    // 访问该url
                    Request request = new Request.Builder().url(url).build();
                    Response resp = null;

                    resp = new OkHttpClient().newCall(request).execute();

                    if (resp.code() == 200) {
                        OSSLog.logDebug("signContrainedURL", "object size: " + resp.body().contentLength());
                    } else {
                        OSSLog.logDebug("signContrainedURL", "get object failed, error code: " + resp.code()
                                + "error message: " + resp.message());
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (ClientException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    /**
     * 删除一个非空桶。
     * 创建一个存储桶,并将文件添加到其中。
     * 尝试删除存储桶,预计会失败。
     * 然后删除文件,然后删除存储桶
     */
    public void deleteNotEmptyBucket(final String bucket, final String filePath) {
        CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucket);
        // 创建bucket
        try {
            mOss.createBucket(createBucketRequest);
        } catch (ClientException clientException) {
            clientException.printStackTrace();
        } catch (ServiceException serviceException) {
            serviceException.printStackTrace();
        }

        PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, "test-file", filePath);
        try {
            mOss.putObject(putObjectRequest);
        } catch (ClientException clientException) {
            clientException.printStackTrace();
        } catch (ServiceException serviceException) {
            serviceException.printStackTrace();
        }
        final DeleteBucketRequest deleteBucketRequest = new DeleteBucketRequest(bucket);
        OSSAsyncTask deleteBucketTask = mOss.asyncDeleteBucket(deleteBucketRequest, new OSSCompletedCallback<DeleteBucketRequest, DeleteBucketResult>() {
            @Override
            public void onSuccess(DeleteBucketRequest request, DeleteBucketResult result) {
                OSSLog.logDebug("DeleteBucket", "Success!");
                progressCallback.onSuccess(request, result);
            }

            @Override
            public void onFailure(DeleteBucketRequest request, ClientException clientException, ServiceException serviceException) {
                progressCallback.onFailure(request, clientException, serviceException);

                // 请求例外
                if (clientException != null) {
                    // 客户端异常,如网络异常
                    clientException.printStackTrace();
                }
                if (serviceException != null) {
                    // The bucket to delete is not empty.
                    if (serviceException.getStatusCode() == 409) {
                        // Delete files
                        DeleteObjectRequest deleteObjectRequest = new DeleteObjectRequest(bucket, "test-file");
                        try {
                            mOss.deleteObject(deleteObjectRequest);
                        } catch (ClientException clientexception) {
                            clientexception.printStackTrace();
                        } catch (ServiceException serviceexception) {
                            serviceexception.printStackTrace();
                        }
                        // Delete bucket again
                        DeleteBucketRequest deleteBucketRequest1 = new DeleteBucketRequest(bucket);
                        try {
                            mOss.deleteBucket(deleteBucketRequest1);
                        } catch (ClientException clientexception) {
                            clientexception.printStackTrace();
                            return;
                        } catch (ServiceException serviceexception) {
                            serviceexception.printStackTrace();
                            return;
                        }
                        OSSLog.logDebug("DeleteBucket", "Success!");
                    }
                }
            }
        });
    }

    public void customSign(Context ctx, String objectKey) {
        OSSCustomSignerCredentialProvider provider = new OSSCustomSignerCredentialProvider() {
            @Override
            public String signContent(String content) {

                // 此处本应该是客户端将contentString发送到自己的业务服务器,然后由业务服务器返回签名后的content。关于在业务服务器实现签名算法
                // 详情请查看http://help.aliyun.com/document_detail/oss/api-reference/access-control/signature-header.html。客户端
                // 的签名算法实现请参考OSSUtils.sign(accessKey,screctKey,content)

                String signedString = OSSUtils.sign(Config.OSS_ACCESS_KEY_ID, Config.OSS_ACCESS_KEY_SECRET, content);
                return signedString;
            }
        };

        GetObjectRequest get = new GetObjectRequest(mBucket, objectKey);
        get.setCRC64(OSSRequest.CRC64Config.YES);
        get.setProgressListener(new OSSProgressCallback<GetObjectRequest>() {
            @Override
            public void onProgress(GetObjectRequest request, long currentSize, long totalSize) {
                Log.d("GetObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
                progressCallback.onProgress(request, currentSize, totalSize);

            }
        });
        OSSAsyncTask task = mOss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
            @Override
            public void onSuccess(GetObjectRequest request, GetObjectResult result) {
                progressCallback.onSuccess(request, result);
            }

            @Override
            public void onFailure(GetObjectRequest request, ClientException clientException, ServiceException serviceException) {
                progressCallback.onFailure(request, clientException, serviceException);

                if (clientException != null) {
                } else if (serviceException != null) {
                }
            }
        });
    }

    public void triggerCallback(Context ctx, String endpoint) {
        OSSPlainTextAKSKCredentialProvider provider = new OSSPlainTextAKSKCredentialProvider("AK", "SK");
        OSSClient tClient = new OSSClient(ctx, endpoint, provider);

        Map<String, String> callbackParams = new HashMap<String, String>();
        callbackParams.put("callbackUrl", "callbackURL");
        callbackParams.put("callbackBody", "callbackBody");

        Map<String, String> callbackVars = new HashMap<String, String>();
        callbackVars.put("key1", "value1");
        callbackVars.put("key2", "value2");

        TriggerCallbackRequest request = new TriggerCallbackRequest("bucketName", "objectKey", callbackParams, callbackVars);

        OSSAsyncTask task = tClient.asyncTriggerCallback(request, new OSSCompletedCallback<TriggerCallbackRequest, TriggerCallbackResult>() {
            @Override
            public void onSuccess(TriggerCallbackRequest request, TriggerCallbackResult result) {
                progressCallback.onSuccess(request, result);
            }

            @Override
            public void onFailure(TriggerCallbackRequest request, ClientException clientException, ServiceException serviceException) {
                progressCallback.onFailure(request, clientException, serviceException);

            }
        });

    }

    public void imagePersist(String fromBucket, String fromObjectKey, String toBucket, String toObjectkey, String action) {

        ImagePersistRequest request = new ImagePersistRequest(fromBucket, fromObjectKey, toBucket, toObjectkey, action);

        OSSAsyncTask task = mOss.asyncImagePersist(request, new OSSCompletedCallback<ImagePersistRequest, ImagePersistResult>() {
            @Override
            public void onSuccess(ImagePersistRequest request, ImagePersistResult result) {
                progressCallback.onSuccess(request, result);
            }

            @Override
            public void onFailure(ImagePersistRequest request, ClientException clientException, ServiceException serviceException) {
                progressCallback.onFailure(request, clientException, serviceException);
            }
        });
    }
}

4、Callback

/**
 * 上传接口
 */

public interface Callback<Request, Result> {

    void onSuccess(Request request, Result result);

    void onFailure(Request request, ClientException clientException, ServiceException serviceException);
}

5、Config

/**
 * 创建时间:
 * 作者:康晨
 * 功能:上传变量
 */

public class Config {
    // 访问的endpoint地址
    public static final String OSS_ENDPOINT = "http://oss-cn-beijing.aliyuncs.com";
    //callback 测试地址
    public static final String OSS_CALLBACK_URL = "http://oss-demo.aliyuncs.com:23450";
    // STS 鉴权服务器地址,使用前请参照文档 https://help.aliyun.com/document_detail/31920.html 介绍配置STS 鉴权服务器地址。
    // 或者根据工程sts_local_server目录中本地鉴权服务脚本代码启动本地STS 鉴权服务器。详情参见sts_local_server 中的脚本内容。
//    public static final String STS_SERVER_URL = "http://*.*.*.*:*/sts/getsts";//STS 地址
    public static final String STS_SERVER_URL = "http://sts.aliyuncs.com";//STS 地址

    public static String REQUEST_ID = "";

    public static String ARN = "";
    public static String ASSUMED_ROLE_ID = "";

    public static String OSS_ACCESS_KEY_ID = "";
    public static String OSS_ACCESS_KEY_SECRET = "";
    public static String SECURITY_TOKEN = "";
    public static String EXPIRATION = "";


//下面是我们自己用的上传区分位置
    //场景:user-用户,            video-视频,           authentication-认证,     report-举报       course-服务
    //类型:user:1-头像;2-背景封面,video:1-封面图;2-视频,authentication:1-认证图,report:1-举报图   course:1-图;2-视频

    //保存的具体路径
    public static final String BY_APP_USER = "user/"+getUpTime()+"/";                 //用户相关上传地址
    public static final String BY_APP_SHORT_VIDEO = "shortVideo/"+getUpTime()+"/";    //短视频相关上传地址
    public static final String BY_APP_COURSE = "course/"+getUpTime()+"/";             //服务相关上传地址
    public static final String BY_APP_LIVE = "live/"+getUpTime()+"/";                 //直播相关上传地址
    public static final String BY_APP_OTHER = "other/"+getUpTime()+"/";               //其他上传地址   评论,投诉 等

    public static String getUpTime(){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMM");
        long lt = System.currentTimeMillis();
        Date date = new Date(lt);
        return simpleDateFormat.format(date);
    }
}

6、ProgressCallback

/**
 * 上传接口
 */

public interface ProgressCallback<Request, Result> extends Callback<Request, Result> {
    void onProgress(Request request, long currentSize, long totalSize);
}

7、SecretBean

package com.example.yousee.myaliyuncs;

import com.google.gson.annotations.SerializedName;

/**
 * 编写人: 康晨
 * 创建时间: 2021/8/16
 * 功能描述:上传构建Oss需要的参数
 */
public class SecretBean {

    @SerializedName("RequestId")
    private String requestId;
    @SerializedName("AssumedRoleUser")
    private AssumedRoleUserBean assumedRoleUser;
    @SerializedName("Credentials")
    private CredentialsBean credentials;

    public String getRequestId() {
        return requestId;
    }

    public void setRequestId(String requestId) {
        this.requestId = requestId;
    }

    public AssumedRoleUserBean getAssumedRoleUser() {
        return assumedRoleUser;
    }

    public void setAssumedRoleUser(AssumedRoleUserBean assumedRoleUser) {
        this.assumedRoleUser = assumedRoleUser;
    }

    public CredentialsBean getCredentials() {
        return credentials;
    }

    public void setCredentials(CredentialsBean credentials) {
        this.credentials = credentials;
    }

    public static class AssumedRoleUserBean {
        @SerializedName("Arn")
        private String arn;
        @SerializedName("AssumedRoleId")
        private String assumedRoleId;

        public String getArn() {
            return arn;
        }

        public void setArn(String arn) {
            this.arn = arn;
        }

        public String getAssumedRoleId() {
            return assumedRoleId;
        }

        public void setAssumedRoleId(String assumedRoleId) {
            this.assumedRoleId = assumedRoleId;
        }
    }

    public static class CredentialsBean {
        @SerializedName("SecurityToken")
        private String securityToken;
        @SerializedName("AccessKeyId")
        private String accessKeyId;
        @SerializedName("AccessKeySecret")
        private String accessKeySecret;
        @SerializedName("Expiration")
        private String expiration;

        public String getSecurityToken() {
            return securityToken;
        }

        public void setSecurityToken(String securityToken) {
            this.securityToken = securityToken;
        }

        public String getAccessKeyId() {
            return accessKeyId;
        }

        public void setAccessKeyId(String accessKeyId) {
            this.accessKeyId = accessKeyId;
        }

        public String getAccessKeySecret() {
            return accessKeySecret;
        }

        public void setAccessKeySecret(String accessKeySecret) {
            this.accessKeySecret = accessKeySecret;
        }

        public String getExpiration() {
            return expiration;
        }

        public void setExpiration(String expiration) {
            this.expiration = expiration;
        }
    }
}

下面就是使用了,使用的时候要注意先要拿到阿里上传的各种密钥,密钥是临时的,会过期,因为当时写的时候没考虑到,所以写到外面了,最好直接封装到上传里面,拿到密钥后再上传

下面是我写的,参考一下

Http.getInstance().toSubscribe(HttpApp.getApiService().TemporarySecret(),
        new ProgressSubscriber<HttpResponse<SecretBean>>(new SubscriberOnNextListener<SecretBean>() {
            @Override
            public void onNext(SecretBean bean) {
                if (bean != null) {
                    Config.REQUEST_ID = bean.getRequestId();

                    SecretBean.AssumedRoleUserBean assumedRoleUser = bean.getAssumedRoleUser();
                    Config.ARN = assumedRoleUser.getArn();
                    Config.ASSUMED_ROLE_ID = assumedRoleUser.getAssumedRoleId();

                    SecretBean.CredentialsBean credentials = bean.getCredentials();
                    Config.OSS_ACCESS_KEY_ID = credentials.getAccessKeyId();
                    Config.OSS_ACCESS_KEY_SECRET = credentials.getAccessKeySecret();
                    Config.SECURITY_TOKEN = credentials.getSecurityToken();
                    Config.EXPIRATION = credentials.getExpiration();
                }
            }

            @Override
            public void onError(ApiException e) {
                ToastUtil.toastShortMessage(e.getMsg());
            }
        }, this, false));

最后就是上传使用了!

OssService ossService = new OssService(PersonalInfoActivity.this, Constant.BUCKET_NAME);
ossService.asyncPutObj(Config.BY_APP_USER + imgPath, bgImgPath);
ossService.setProgressCallback(new ProgressCallback() {
    @Override
    public void onProgress(Object o, long currentSize, long totalSize) {
       //上传中
    }

    @Override
    public void onSuccess(PutObjectRequest request, PutObjectResult result) {
        //上传成功
    }

    @Override
    public void onFailure(Object o, ClientException clientException, ServiceException serviceException) {
        //上传失败
    }
});

/**
 * BUCKET_NAME  阿里云桶名
 */
public static final String BUCKET_NAME = DEBUG_MODE ? "byapp-test" : "byapp-production";