【问题标题】:Dynamically provide awsconfiguration while uploading files using TransferUtility使用 TransferUtility 上传文件时动态提供 awsconfiguration
【发布时间】:2019-04-27 23:29:42
【问题描述】:

当前实施

我已经使用AWS Mobile SDK 实现了文件上传功能,根据他们的文档,我们必须存储一个awsconfiguration.json 文件(该文件包含CognitoIdentityIdentityManagerS3TransferUtility),我们创建了一个实例TransferUtility 像这样上传:

TransferUtility transferUtility = TransferUtility.builder()
            .context(getApplicationContext())
            .awsConfiguration(AWSMobileClient.getInstance().getConfiguration())
            .s3Client(new AmazonS3Client(AWSMobileClient.getInstance()))
            .build();

当我们只有一个 AWS Instance 时,这个实现效果很好

要求实施

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

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

问题

是否有任何方法可以动态生成 awsconfiguration.json 或更好的方法,在上传文件时为 CognitoIdentity 和 S3TransferUtility 等字段传递值?

【问题讨论】:

  • 您需要awsconfiguration.json 中的所有值??
  • 是的,至少需要CognitoIdentity & S3TransferUtility 及其子字段
  • 您也可以在没有 json 文件的情况下手动配置您的 aws。您可以为多个帐户动态设置。
  • @SavinSharma 如果可能的话,您能否发布代码 sn-p 或分享我可以找到此解决方案的链接?
  • 我分享了一个代码 sn-p,我已将它用于我的 aws 上传部分。

标签: android amazon-s3 aws-sdk


【解决方案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();

【讨论】:

  • 您有从哪里获得此解决方案的链接吗?如果是,请也发布它
  • 实际上我没有链接,因为几个月前我就这样做了。我当时参考了amazon s3的官方文档。
  • 好的。我正在查看您的解决方案,但我没有找到任何添加 PoolIdRegion 的方法,它们位于 Default JsonObject of CognitoIdentity
  • 我已经提到了如何在amazonS3Client 中添加Region
猜你喜欢
  • 2021-09-03
  • 1970-01-01
  • 2012-07-19
  • 2014-11-23
  • 1970-01-01
  • 2015-11-29
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多