Je travaille sur une application qui utilisera le seau imdb samsung aws s3 appelé "imdb-datasets" pour afficher diverses informations sur le film. Avant d'essayer cela, j'ai testé le code avec mon propre seau et réussi à télécharger et télécharger un fichier de test de mon appareil Android à mon seau et vice versa. Mais en essayant la même méthode avec le seau imdb-datasets, j'ai commencé à recevoir une erreur d'accès refusé 403. Après avoir fait des recherches, j'ai découvert que le problème serait que je devais spécifier dans le code qu'il s'agit d'un seau demandeur-payeur . J'ai essayé d'implémenter le bit payeur du demandeur (le code commenté) mais il bloque mon application. Je n'ai aucune idée de comment l'implémenter dans mon application car je n'ai pas réussi à trouver de guide ou de solution. Des idées comment faire cela?Accès refusé erreur imdb s3 seau
Modifier: J'ai également donné des autorisations pour que l'application puisse accéder au stockage, à la fois par le biais du manifeste et manuellement dans l'application via les paramètres de l'appareil Android. Les stratégies de rôle avec l'utilisateur iam et le compartiment imdb sont également affectées.
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());
}
});
}
}
Assurez-vous que vous n'avez pas de problème d'autorisation d'exécution pour le stockage. ne sais pas alors plz google –