AmazonS3 android sdk接入
AmazonS3 android sdk接入前段时间接了iOS的AmazonS3,用于上传及访问大文件和图片。过程比较坎坷,Android总的来说顺利很多,不过也碰到一些问题,在此记录一下官方的示例代码示例代码挺好的,不过不是太符合我的要求,我们服务端给的AWS凭证是动态的,每2小时更新一次。看官方的教程好像是写死在配置里的。而且我也没找到符合我需求的示例代码。集成方式和官网描述一样,不嫌我废话的
·
AmazonS3 android sdk接入
前段时间接了iOS的AmazonS3,用于上传及访问大文件和图片。过程比较坎坷,Android总的来说顺利很多,不过也碰到一些问题,在此记录一下
示例代码挺好的,不过不是太符合我的要求,我们服务端给的AWS凭证是动态的,每2小时更新一次。看官方的教程好像是写死在配置里的。
而且我也没找到符合我需求的示例代码。
集成方式和官网描述一样,不嫌我废话的话,我就贴一下吧。
dependencies {
def aws_version = "2.16.+"
implementation "com.amazonaws:aws-android-sdk-s3:$aws_version"
implementation ("com.amazonaws:aws-android-sdk-mobile-client:$aws_version") { transitive = true }
}
把该加的权限加一下 代码就不贴了。
以下是动态配置AWS 凭证的代码
public void downloadFileByKey(String key) throws JSONException {
JSONObject jsonConfig = new JSONObject();
JSONObject s3TransferUtility = new JSONObject();
jsonConfig.putOpt("S3TransferUtility", s3TransferUtility);
s3TransferUtility.put("Region", "服务端请求来的region");
s3TransferUtility.put("Bucket", "服务端请求来bucket");
AWSSessionCredentials credentials = new AWSSessionCredentials() {
@Override
public String getSessionToken() {
return "服务端请求过来的SessionToken";
}
@Override
public String getAWSAccessKeyId() {
return "服务端请求来的AccessKey";
}
@Override
public String getAWSSecretKey() {
return "服务端请求来的SecretKey";
}
};
AWSConfiguration configuration = new AWSConfiguration(jsonConfig);
TransferUtility utility = TransferUtility.builder()
.context(this)
.s3Client(new AmazonS3Client(credentials))
.awsConfiguration(configuration)
.build();
File file = new File(Environment.getExternalStorageDirectory().getPath() + "/test44.png");
TransferObserver observer = utility.download(key, file);
observer.setTransferListener(new TransferListener() {
@Override
public void onStateChanged(int i, TransferState transferState) {
if (transferState == TransferState.COMPLETED) {
//下载完成了
}
}
@Override
public void onProgressChanged(int i, long l, long l1) {
}
@Override
public void onError(int i, Exception e) {
//下载出错
}
});
}
上传代码类似,把以上代码中下载的那行 修改成
TransferObserver observer = utility.upload(key, file);
假如你们服务器给的是静态的凭证,那应该更简单,设置AWSCredentials的时候改用以下代码即可
AWSCredentials credentials2 = new AWSCredentials() {
@Override
public String getAWSAccessKeyId() {
return "你的AccessKeyId";
}
@Override
public String getAWSSecretKey() {
return "你的SecretKey";
}
};
小结
没了,所有代码都在这了
更多推荐
已为社区贡献1条内容
所有评论(0)