"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());
}
});
}
}
ストレージに実行時のアクセス権の問題がないことを確認してください。 PLZ googleを知らない –