Невозможно загрузить s3 bucket из android, используя cognito - PullRequest
0 голосов
/ 15 апреля 2020

Привет, ребята, поэтому я пытаюсь загрузить изображение из моего эмулятора в корзину s3, используя android и cognito:

package com.example.s3_aws;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;

import com.amazonaws.auth.CognitoCachingCredentialsProvider;
import com.amazonaws.mobileconnectors.s3.transferutility.TransferListener;
import com.amazonaws.mobileconnectors.s3.transferutility.TransferObserver;
import com.amazonaws.mobileconnectors.s3.transferutility.TransferState;
import com.amazonaws.mobileconnectors.s3.transferutility.TransferUtility;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.CannedAccessControlList;

import java.io.File;

public class MainActivity extends AppCompatActivity {
    AmazonS3 s3;
    TransferUtility transferUtility;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        credentialsProvider();
        setTransferUtility();
        upload();

    }

    public void credentialsProvider(){
        // Initialize the Amazon Cognito credentials provider
        CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
                getApplicationContext(),
                "idafa", // I actually have here the correct identity pool id
                Regions.US_EAST_1// Region
        );

        setAmazonS3Client(credentialsProvider);
    }

    public void setAmazonS3Client(CognitoCachingCredentialsProvider credentialsProvider){

        s3 = new AmazonS3Client(credentialsProvider);
        s3.setRegion(Region.getRegion(Regions.US_EAST_1));
    }

    public void setTransferUtility(){
        transferUtility = new TransferUtility(s3, getApplicationContext());
    }

    public void upload(){
        @SuppressLint("SdCardPath") final TransferObserver observer = transferUtility.upload(
                "s3.android.test",
                "test.png",
                new File("/sdcard/DCIM/Camera/IMG_20200415_001815.jpg"),
                CannedAccessControlList.PublicRead
        );

        observer.setTransferListener(new TransferListener() {
            @Override
            public void onStateChanged(int id, TransferState state) {
                if (state.equals(TransferState.COMPLETED)) {
                    Log.i("state changed", state+"");
                } else if (state.equals(TransferState.FAILED)) {
                    Log.e("state changed", state+"");
                }

            }
            @Override
            public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {

            }
            @Override
            public void onError(int id, Exception ex) {

            }
        });
    }


}

Проблема заключается в том, что при запуске программы возникают ошибки:

Ошибка при доступе к AndroidKeyStore для получения ключа для keyAlias: com.amazon aws. android .auth.aesKeyStoreAlias ​​

Ошибка при получении ключа дешифрования, используемого для расшифровки данные из постоянного хранилища. Возвращая null для запрошенного dataKey

Я оставляю здесь также встроенную политику, которую я дал роли unauth, возможно, здесь может быть проблема:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement0",
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": "arn:aws:s3:::s3.android.test/*"
        }
    ]
}

1 Ответ

1 голос
/ 16 апреля 2020

это также случилось со мной вот что сработало

добавьте

-keep class com.amazonaws.mobileconnectors.s3.transferutility.TransferNetworkConnectionType {*;}

в proguard-rules.pro файл в вашем проекте, который решил мою проблему.

и вот мои s3 зависимости

//amazon s3 bucket
implementation 'com.amazonaws:aws-android-sdk-core:2.15.1'
implementation 'com.amazonaws:aws-android-sdk-cognito:2.6.23'
implementation 'com.amazonaws:aws-android-sdk-s3:2.15.1'
//implementation 'com.amazonaws:aws-java-sdk:1.11.404'
implementation 'com.amazonaws:aws-android-sdk-ddb:2.2.0'
implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.16.8') { transitive = true; }

видели это здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...