本文已参与【新人创作礼】活动,一起开启掘金创作之路
一、导入依赖
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";