2017-10-16 14 views
1

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

} 
+0

Assurez-vous que vous n'avez pas de problème d'autorisation d'exécution pour le stockage. ne sais pas alors plz google –

Répondre

0

fichiers sont situés sous documents/v1/*

Dans votre exemple, la clé est juste title.basics.tsv.gz

Dans leur exemple de code 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/

Je ne sais pas ce que l'application est pour ou fait, mais un rappel au sujet de leur licence

Vous pouvez détenir des copies locales de ces données, et il est soumis à nos conditions. S'il vous plaît se référer à la Non-Commercial Licensing et copyright/license et vérifier la conformité.