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";
            }
        };

小结

没了,所有代码都在这了

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐