2017-10-16 1 views
1

"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()); 
     } 
    }); 
} 

} 
+0

저장소에 대한 런타임 권한 문제가 없는지 확인하십시오. PLZ 구글을 모른다. –

답변

0

파일은 문서를 아래에 위치/V1/* 당신의 예에서

는 키는 title.basics.tsv.gz

자신의 코드 예제에 here

private static String bucketName = "imdb-datasets"; 
private static String key  = "documents/v1/current/name.basics.tsv.gz";  

public static void main(String[] args) throws IOException, InterruptedException { 
    ProfileCredentialsProvider credentialsProvider = 
      new ProfileCredentialsProvider("*** FULL PATH TO AWS CREDENTIALS FILE ***", 
              "*** CREDENTIALS PROFILE NAME ***"); 

    AmazonS3 s3Client = new AmazonS3Client(credentialsProvider); 

    try { 
     // Note: It's necessary to set RequesterPays to true 
     GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key) 
               .withRequesterPays(true); 

http://www.imdb.com/interfaces/

I 앱가 또는 않지만 자신의 라이센스

에 대한 알림 당신은이 데이터의 로컬 복사본을 저장할 수있는 모르겠어요, 그것은 우리의 조건을 준수합니다. Non-Commercial Licensingcopyright/license을 참조하고 규정을 확인하십시오.