Динамически предоставлять awsconfiguration при загрузке файлов с помощью TransferUtility - PullRequest
0 голосов
/ 26 ноября 2018

Текущая реализация

Я реализовал функцию загрузки файлов, используя AWS Mobile SDK, и в соответствии с их документацией мы должны сохранить файл awsconfiguration.json (этот файл содержит CognitoIdentity,IdentityManager & S3TransferUtility) и мы создаем экземпляр 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 при загрузке файла?

1 Ответ

0 голосов
/ 26 ноября 2018

Вы можете добавить конфигурацию 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 = new ClientConfiguration();
clientConfiguration.setMaxErrorRetry(0);
clientConfiguration.setConnectionTimeout(3600000);
clientConfiguration.setSocketTimeout(3600000);

Это ваша часть CongnitoIdentity

Теперь получите bucketNameS3, accessKey и secretKey из некоторых API, которые вы можете установитьдинамический для динамического аккаунта.

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...