当前实施
我已经使用AWS Mobile SDK
实现了文件上传功能,根据他们的文档,我们必须存储一个awsconfiguration.json
文件(此文件包含CognitoIdentity
,IdentityManager
和{{ 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等字段传递值?
答案 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中获取bucketNameS3
,accessKey
和secretKey
,您可以为动态帐户设置动态。
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();