2016-03-30 20 views
0

Ich habe das AWS Android SDK zu meiner App hinzugefügt und ich habe Code in einer AsyncTask, der mein Video in meinen Bucket hochladen sollte, aber es funktioniert nicht.Video von Android auf AWS S3 hochladen

Android Code:

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

if (resultCode == RESULT_OK) { 
     if (requestCode == SELECT_VIDEO) { 

      try { 
Uri selectedImageUri = data.getData(); 
       File file = new File(String.valueOf(selectedImageUri)); 


       // Initialize the Amazon Cognito credentials provider 
       CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
         getApplicationContext(), 
         "us-east-1:5bfc6b1a-6193-4fXc-823f-ba21a9fadc1b", // Identity Pool ID 
         Regions.US_EAST_1 // Region 
       ); 

       // Create an S3 client 
       AmazonS3 s3 = new AmazonS3Client(credentialsProvider); 
       // Set the region of your S3 bucket 
       s3.setRegion(Region.getRegion(Regions.US_EAST_1)); 
       TransferUtility transferUtility = new TransferUtility(s3, SellerHomePage.this); 

       TransferObserver observer = transferUtility.upload(
         "willsapptest", 
         "plzWork", 
         file 
       ); 


       observer.setTransferListener(new TransferListener() { 
        public void onStateChanged(int id, TransferState state) { 
         //check the state 
        } 

        @Override 
        public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) { 

        } 

        public void onError(int id, Exception ex) { 
         Log.e("", "Error during upload: " + id, ex); 
        } 
       }); 
     ); 
       }catch (Exception e){ 
       SevenSecVideoName = (TextView) findViewById(R.id.SevenSecFileNameTxt); 
       SevenSecVideoName.setText("File Name..."); 
       SevenSecVideoName.setTextColor(Color.parseColor("#797979")); 

       e.printStackTrace(); 
       Toast.makeText(SellerHomePage.this,"Please pick a valid video",Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
} 

Ich habe es so nicht authentifizierte Benutzer auf die

Fehlercode von Android-Monitor S3 hochladen:

03-30 19:27:52.469 2255-2255/com.wilsapp.wilsapp D/CognitoCachingCredentialsProvider: Loading credentials from SharedPreferences 
03-30 19:27:52.469 2255-2255/com.wilsapp.wilsapp D/CognitoCachingCredentialsProvider: No valid credentials found in SharedPreferences 
03-30 19:27:53.141 2255-2255/com.wilsapp.wilsapp I/Choreographer: Skipped 33 frames! The application may be doing too much work on its main thread. 

Antwort

1

Ihre CognitoCachingCredentialsProvider ist nicht korrekt initialisiert. Sie müssen es mit der IdentityPoolId initialisieren, die das Format <region>:<guid> hat. Sie scheinen derzeit den Namen des Identitätspools zu verwenden.

EDIT:

"wilsapp_MOBILEHUB_1766067928", ist der Name des Pools ist es nicht die Pool-ID. Um die Pool-ID zu erhalten, gehen Sie zur Cognito-Konsole -> klicken Sie auf den Namen des Pools -> Beispielcode -> kopieren Sie die Pool-ID aus der Probe

EDIT2: Sie erhalten keine Ausnahme direkt von S3 in Ihrem Versuch zu fangen . Stattdessen können Sie setzen Zuhörer auf Ihre Beobachter und t-Updates auf Upload hören/herunterladen

observer.setListener(new TransferListener() { 
    public onProgressChanged(int id, long bytesCurrent, long bytesTotal){ 
    //update progress 
    } 

    public void onStateChanged(int id, TransferState state) { 
    //check the state 
    } 

    public void onError(int id, Exception ex) { 
    //log error 
    } 
}); 

Es hat onError Methode, die eine Ausnahme gibt, falls zu verfolgen eine Ausnahme

+0

Entschuldigung aber können Sie bitte auf die Antwort klären: D –

+0

hat gerade meinen Kommentar bearbeitet, hoffe es hilft – Karthik

+0

okay, das hat geholfen! aber ich führe meinen Code jetzt und im Android Monitor bekomme ich diesen Fehler (überprüfen Sie die Frage) Ich habe auch mehr von meinem Code hinzugefügt. –

0

ist, können Sie es verwenden, wie Diese

Der folgende Code wird verwendet, um auf Ihre aws s3 zuzugreifen, in der Sie accessKey und secretKey als Ihre Anmeldeinformationen übergeben müssen.

  BasicAWSCredentials credentials = new BasicAWSCredentials(accessKey,secret); 
      AmazonS3Client s3 = new AmazonS3Client(credentials); 
      s3.setRegion(Region.getRegion(Regions.US_EAST_1)); 

Transfer-Dienstprogramm ist die Klasse, von dem Sie Ihre Datei s3 hochladen.

  TransferUtility transferUtility = new TransferUtility(s3, UploadFileActivity.this); 

den Pfad der Datei von Ihren Speichern bekommen und es als Datei wie unten

  //You have to pass your file path here. 
      File file = new File(filePath); 
      if(!file.exists()) { 
       Toast.makeText(UploadFileActivity.this, "File Not Found!", Toast.LENGTH_SHORT).show(); 
       return; 
      } 
      TransferObserver observer = transferUtility.upload(
        Config.BUCKETNAME, 
        "video_test.jpg", 
        file 
      ); 

Hier können Sie observer.setTransferListener den Fortschritt Ihrer Upload-Datei kennen

  observer.setTransferListener(new TransferListener() { 
       @Override 
       public void onStateChanged(int id, TransferState state) { 

        if (state.COMPLETED.equals(observer.getState())) { 

         Toast.makeText(UploadFilesActivity.this, "File Upload Complete", Toast.LENGTH_SHORT).show(); 
        } 
       } 

       @Override 
       public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) { 

       } 

       @Override 
       public void onError(int id, Exception ex) { 

        Toast.makeText(UploadFilesActivity.this, "" + ex.getMessage(), Toast.LENGTH_SHORT).show(); 
       } 
      }); 
verwenden passieren
+0

Bitte fügen Sie einige Kommentare darüber, wie dies das ursprüngliche Problem löst. Code-only-Antworten werden in der Regel als "niedrige Qualität" gekennzeichnet und gelöscht. – Graham