亚马逊官网对Android端实现上传下载的操作十分复杂,其实大多数操作都是为了生成awsconfiguration.json的配置文件,但这个配置文件也只是提供了键值对初始值,并不是必须的,可以自己组建JSONObject赋值

implementation 'com.amazonaws:aws-android-sdk-s3:2.26.0'

构建 AWSConfiguration

主要设置Region 和 Bucket

  1. 第一种通过自定义方式(推荐 可以做到动态修改)
 JSONObject jsonConfig = new JSONObject();
        JSONObject defaultObj = new JSONObject();
        JSONObject s3TransferUtility = new JSONObject();
        s3TransferUtility.put("Region", ***);
        s3TransferUtility.put("Bucket", bucketName);
        defaultObj.putOpt("Default", s3TransferUtility);
        jsonConfig.putOpt("S3TransferUtility", defaultObj);
        AWSConfiguration configuration =new AWSConfiguration(jsonConfig);
  1. 第二种通过awsconfiguration.json 文件
//文件中
"S3TransferUtility": {
    "Default": {
      "Bucket": "***",
      "Region": "***"
  //代码中
 AWSConfiguration configuration =new AWSConfiguration(content);

构建AmazonS3Client

主要是设置 accessId 和 secretKey,一般由服务端下发

 AWSCredentials credentials = new AWSCredentials() {
            @Override
            public String getAWSAccessKeyId() {
                return s3Config.getAccessKeyID();
            @Override
            public String getAWSSecretKey() {
                return s3Config.getSecretKey();
        AmazonS3Client s3Client= new AmazonS3Client(credentials,Region.getRegion(Regions.CN_NORTHWEST_1));

构建TransferUtility

上传下载的核心类

 TransferUtility utility = TransferUtility.builder()
                .context(context.getApplicationContext())
                .s3Client(s3Client)
                .awsConfiguration(configuration)
                .build();
//key 为上传是设置的key
TransferObserver observer = utility.download(key, file);
TransferObserver observer =  utility.upload(key,file);
observer.setTransferListener(new TransferListener() {
            @Override
            public void onStateChanged(int i, TransferState transferState) {
                Log.i("testSave","onStateChanged:"+transferState.toString());
                if (transferState == TransferState.COMPLETED) {
                    //下载完成了
                    Log.i("testSave","下载完成");
            @Override
            public void onProgressChanged(int i, long l, long l1) {
                Log.i("testSave","下载进度:"+i+" L:"+l+" l1:"+l1);
            @Override
            public void onError(int i, Exception e) {
                Log.i("testSave","onError:"+e.getMessage());
        });
                                    我可以将图像从Android上传Amazon s3.但是它们始终是私有的,没有人可以显示它们.我必须在Amazon s3管理控制台上将其公开.上传图像时,我无法为图像设置ACL.我了解到,有两种方法可以将图像从Android上传Amazon s3:>使用PutObjectRequest>使用TransferUtility.upload()我都尝试过.如果我更喜欢PutObjectR...
                                    问://初始化Amazon Cognito凭证提供程序CognitoCachingCredentialsProvider certificateProvider =新的CognitoCachingCredentialsProvider(getApplicationContext(),“ us-west-2:45af92a8-2a30-4540-bbd6-a7ec68b9fcd4”,//身份池IDR...
                                    前段时间项目需求需要接入亚马逊S3云服务存储视频、图片资源,但是发现网上关于AndroidAmazon S3的资料写的都不是特别充足,于是专门写一篇给需要接入此功能的作为参考。
Amazon 官网
Amazon S3 Andoroid SDK文档
1.准备工作
首先你得去Amazon平台注册一个账号传送门
注册账号以后在你的电脑上安装CLI,这个工具是为应用创建,集成和管理AWS云服务。
                                    AmazonS3 android sdk接入
前段时间接了iOS的AmazonS3,用于上传及访问大文件和图片。过程比较坎坷,Android总的来说顺利很多,不过也碰到一些问题,在此记录一下
官方的示例代码
示例代码挺好的,不过不是太符合我的要求,我们服务端给的AWS凭证是动态的,每2小时更新一次。看官方的教程好像是写死在配置里的。
而且我也没找到符合我需求的示例代码。
集成方式和官网描述一样,不嫌我废话的话,我就贴一下吧。
dependencies {
    def aws_version = "2
                                    参考aws云服务文档 
https://aws.amazon.com/cn/documentation/s3/aws云服务实例代码 
https://github.com/awslabs/aws-sdk-android-samplesapi 
https://docs.aws.amazon.com/AWSAndroidSDK/latest/javadoc/接入步骤1、添加依赖dependencies
                                    上传文件时,有时候需要上传大文件,但是当网络不好、或者断网时,容易导致之前上传的内容失败,功亏一篑。这时就可以使用分段上传。
分段上传就是将文件分为几部分分开上传,哪一部分上传失败就重传这部分内容,最后所有部分上传完成,再合在一起。
                                    如何通过aws SDK Android公开S3对象?(How do you make an S3 object public via the aws SDK Android?)我需要将我的上传内容公之于众。 我能够将图像上传s3存储桶中。 但我无法通过编程方式公开我使用AWS SDK 2.1.10以下是我将图像上传s3存储桶的代码mUpload = getTransferManager().u...
                                    SDK-Android概述您可以使用Android SDK管理互盟云对象存储,可从https://github.com/aws/aws-sdk-android下载Android Source Code操作由于android sdk用chunk 方式进行传输,并且把chunk-signature放置在body中,oss不支持这种case;sdk中支持的参数 S3ClientOptions.buil...
                                    AWS SDK for AndroidThe AWS SDK for Android provides a library and documentation for developers to build connected mobile applications using AWS.Features / APIsAuthentication: APIs and building blocks ...
                                    aws-java-sdk-s3 简介、中文文档、中英对照文档 下载;aws-java-sdk-s3、com.amazonaws、中文文档、中英对照文档、下载、包含jar包、原API文档、源代码、Maven依赖信息文件、翻译后的API文档、amazonaws、s3java、sdk、jar包、java、中英对照文档;aws-java-sdk-s3-1.11.939.jar;com.amazonaws.auth
public class S3 {
    public static boolean USE_NEW_IMG = true;
    //    private static String URL_POST_US = ".s3-website-us-west-2.amazonaws.