2017-10-16 14 views
1

"imdb-datasets"と呼ばれるamazon aws s3 imdbバケットを使用してさまざまなムービー情報を表示するアプリケーションで作業しています。これを試す前に、自分のバケツでコードをテストし、アンドロイドデバイスからバケットにテストファイルをアップロードしてダウンロードすることができました。しかし、imdb-datasetsバケットを使って同じメソッドを試すと、エラー403を受け取ることができなくなりました。いくつかの調査をした後、私は可能な問題は、コードでリクエスタが支払うバケット。私はリクエスタがビット(コメントアウトされたコード)を支払う実装しようとしましたが、それは私のアプリケーションをクラッシュさせます。私はガイドや解決策を見つけることができなかったので、私はどのように私のアプリでそれを実装するのか分かりません。任意のアイデアをどのように行うには?アクセス拒否エラーimdb s3バケット

編集:アンドロイドデバイスの設定により、マニフェストと手動でアプリにストレージにアクセスできるようにするための権限もアプリに与えました。 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 googleを知らない –

答えて

0

ファイルはあなたの例では、文書/ V1/*

の下に配置されているキーが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/

彼らのコード例では、単に title.basics.tsv.gz

です

私はアプリがのためにあるか、何をするかわかりませんが、そのライセンス

についてのリマインダーあなたは、このデータのローカルコピーを保持することができ、そしてそれは私たちの契約条件に従うものとします。 Non-Commercial Licensingおよびcopyright/licenseを参照し、適合を確認してください。

関連する問題