"imdb-datasets"이라는 amazon aws s3 imdb 버킷을 사용하여 다양한 영화 정보를 표시하는 앱에서 작업하고 있습니다. 이것을 시도하기 전에 나는 코드를 내 자신의 버킷으로 테스트했고 내 안드로이드 장치에서 테스트 파일을 내 버킷으로 업로드하고 그 반대로 업로드 할 수있었습니다. 하지만 imdb-datasets 버킷을 사용하여 동일한 메소드를 시도 할 때 오류 403이 거부되었습니다. 일부 조사를 수행 한 후 가능한 문제는 코드에서 요청자가 지불하는 버킷임을 지정해야한다는 것입니다. . 요청자가 비트 (주석 처리 된 코드)를 지불하도록 구현하려고 시도했지만 응용 프로그램이 충돌합니다. 나는 가이드 나 솔루션을 찾을 수 없었기 때문에 앱에서 구현하는 방법을 모른다. 어떤 아이디어로 그렇게 할 수 있습니까?액세스 거부 오류 imdb s3 버킷
편집 : Android 기기 설정을 통해 앱에서 매니페스트와 앱을 통해 저장소에 액세스 할 수있는 권한을 부여했습니다. iam 사용자 및 imdb 버킷의 역할 정책도 할당됩니다.
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
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 java.io.File;
public class movieChooseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_movie_choose);
}
public void getFile(View v) {
File sdcard = Environment.getExternalStorageDirectory();
String key = "documents/v1/current/title.basics.tsv.gz";
File file = new File(key, "title.basics.tsv.gz");
// Initialize the Amazon Cognito credentials provider
CognitoCachingCredentialsProvider credentialsProvider = new
CognitoCachingCredentialsProvider(
getApplicationContext(),
"eu-west-2:4c829519-0596-4fdb-ad04-6b8912e44164", // Identity
//pool ID
Regions.EU_WEST_2 // Region
);
AmazonS3 s3 = new AmazonS3Client(credentialsProvider);
s3.setRegion(Region.getRegion(Regions.US_EAST_1));
//include the appropriate request-payer parameter
//s3.getObject(new GetObjectRequest("imdb-datasets",
key).withRequesterPays(true));
TransferUtility transferUtility = new TransferUtility(s3,
getApplicationContext());
TransferObserver transferObserver = transferUtility.download("imdb-
datasets","title.basics.tsv.gz",file);
transferObserver.setTransferListener(new TransferListener() {
@Override
public void onStateChanged(int i, TransferState state) {
Log.e("statechange",state + " ");
if(state == state.COMPLETED) {
Toast.makeText(movieChooseActivity.this, "File transfered",
Toast.LENGTH_LONG).show();
}
if(state == state.FAILED) {
Toast.makeText(movieChooseActivity.this, "Failed",
Toast.LENGTH_LONG).show();
}
}
@Override
public void onProgressChanged(int i, long l, long l1) {
}
@Override
public void onError(int i, Exception e) {
Log.e("whattowatchapp","Error:"+ e.getMessage());
}
});
}
}
저장소에 대한 런타임 권한 문제가 없는지 확인하십시오. PLZ 구글을 모른다. –