使用TransferUtility

时间:2018-11-26 10:26:09

标签: android amazon-s3 aws-sdk

当前实施

我已经使用AWS Mobile SDK实现了文件上传功能,根据他们的文档,我们必须存储一个awsconfiguration.json文件(此文件包含CognitoIdentityIdentityManager和{{ 1}}),然后我们创建一个S3TransferUtility的实例进行上传:

TransferUtility

当我们只有一个TransferUtility transferUtility = TransferUtility.builder() .context(getApplicationContext()) .awsConfiguration(AWSMobileClient.getInstance().getConfiguration()) .s3Client(new AmazonS3Client(AWSMobileClient.getInstance())) .build();

时,此实现效果很好

必需的实施

我有一个要求,我必须为多个AWS Instance实现此功能。为了更好地解释,我们为不同的客户端提供了一个以上的AWS账户,每个账户将拥有自己的s3存储桶。

现在,我必须根据我在应用程序中登录的客户端类型上载文件。这意味着他们的AWS Instance文件对于每个客户端都是不同的。

问题

有什么方法可以动态生成awsconfiguration.json或更高版本,在上传文件时为CognitoIdentity和S3TransferUtility等字段传递值?

1 个答案:

答案 0 :(得分:1)

您可以手动添加aws配置,而无需使用awsconfiguration.json

build.gradle

implementation 'com.amazonaws:aws-android-sdk-core:2.6.+'
implementation 'com.amazonaws:aws-android-sdk-s3:2.6.+'
implementation 'com.amazonaws:aws-android-sdk-ddb:2.6.+'

这是AWS的ClientConfiguration部分

ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setMaxErrorRetry(0);
clientConfiguration.setConnectionTimeout(3600000);
clientConfiguration.setSocketTimeout(3600000);
  

这是您的CongnitoIdentity部分

现在从某些api中获取bucketNameS3accessKeysecretKey,您可以为动态帐户设置动态。

String bucketNameS3 = "something";
String accessKey = "something";
String secretKey = "something";

BasicAWSCredentials对象中设置所有此值,例如

BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(accessKey, secretKey);

下一步是您的AmazonS3Client对象

AmazonS3Client amazonS3Client = new AmazonS3Client(basicAWSCredentials, clientConfiguration);

您可以在此处将Regions添加到AmazonS3Client中,只需创建对象并将其传递到amazonS3Client中即可。

地区

Regions regions = Regions.fromName("your region name");
amazonS3Client.setRegion(Region.getRegion(regions));
  

您的TransferUtility部分

TransferUtilityOptions options = new TransferUtilityOptions();
options.setTransferThreadPoolSize(1);
options.setTransferServiceCheckTimeInterval(30 * 1000); // 30-second
TransferUtility transferUtility = TransferUtility.builder()
                        .context(getApplicationContext())
                        .s3Client(amazonS3Client)
                        .transferUtilityOptions(options)
                        .defaultBucket(bucketNameS3)
                        .build();