Привет, ребята, поэтому я пытаюсь загрузить изображение из моего эмулятора в корзину 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/*"
}
]
}