2015-07-03 16 views
10

Ich habe den Dateiupload auf Amazon S3 nach dem Amazon-Leitfaden implementiert und ich habe festgestellt, dass es zu langsam ist. Es dauert ungefähr 10 Sekunden, um eine einfache PNG-Datei um 20kb hochzuladen.Hochladen von Datei auf Amazon S3 von Android langsam

Anfangs dachte ich, dass das Problem mit Threads zusammenhing und ich habe eine AsyncTask implementiert, um das Bild hochzuladen, aber das Problem ist immer noch da. Im Folgenden wird der Code zum Hochladen des Bildes beschrieben.

private class UploadFileTask extends AsyncTask<String, Integer, String> { 
    String remotePath; 
    String remoteFileName; 
    File file; 
    Context context; 
    S3UploadInterface listener; 


    public UploadFileTask(Context context,String remotePath,String remoteFileName, File file, S3UploadInterface listener){ 
     this.context=context; 
     this.remotePath=remotePath; 
     this.remoteFileName=remoteFileName; 
     this.file=file; 
     this.listener=listener; 
    } 

    protected String doInBackground(String... params) { 
     credentialsProvider = new CognitoCachingCredentialsProvider(context, 
       "MY_PRIVATE_CREDENTIAL", 
       Regions.US_EAST_1); 
     TransferManager transferManager = new TransferManager(credentialsProvider); 
     Upload upload = transferManager.upload(remotePath, remoteFileName, file); 
     TransferProgress transferred = upload.getProgress(); 
     while (!upload.isDone()) { 
      try { 
       publishProgress((int) transferred.getPercentTransferred()); 
      } catch (Exception e) { 
       listener.uploadFailed(e); 
      } 
     } 
     return "uploaded"; 
    } 

    protected void onProgressUpdate(Integer... progress) { 
     if (listener!=null) 
      listener.currentUploadProgress(progress[0]); 
    } 

    protected void onPostExecute(String result) { 
     if (listener!=null) 
      listener.uploadCompleted(); 
    } 
} 

Jede Idee, dieses Problem zu lösen? Thanks :)

+1

Wie messen Sie die Zeit? Die Upload-Geschwindigkeit hängt von der Netzwerkqualität ab. Es hängt auch davon ab, mit welchem ​​Endpunkt Sie eine Verbindung herstellen. Zum Beispiel, wenn Sie in Europa sind und Sie eine Datei zu uns-Ost-1 (US Virginia) hochladen, kann es langsam sein. Wählen Sie den Endpunkt, der Ihnen am nächsten ist, um die Geschwindigkeit zu erhöhen. – Yangfan

+2

Derzeit sind wir in Europa und wir haben unsere Instanzen in Virginia. Vielleicht liegt das Problem an der Regionswechsel, weil der gepostete Code geradlinig ist. In unseren Zukunftsplänen werden wir unsere Instanzen nach Irland migrieren und prüfen, ob das Problem weiterhin besteht. Ich werde auf dem Laufenden bleiben – rdiaz82

+2

Haben Sie sich Amazon Route 53 (https://aws.amazon.com/route53/) angesehen? Es ist ein DNS-basiertes Produkt, das es Ihnen ermöglicht, auf der Grundlage des Standorts zu der nächsten verfügbaren S3- oder AWS-Ressource zu routen. – StephenG

Antwort

4

Diese CPU zu laufen

while (!upload.isDone()) { 
     try { 
      publishProgress((int) transferred.getPercentTransferred()); 
     } catch (Exception e) { 
      listener.uploadFailed(e); 
     } 
    } 

Versuchen Hinzufügen Thread.sleep geben anderen Threads Zeit hämmern wird.

+1

Guter Punkt! Ich implementiere die While-Schleife nach der Amazon S3-Dokumentation, ich werde mit Ihrer Lösung versuchen und überprüfen, wie es funktioniert. Vielen Dank! – rdiaz82

+2

@frank ist wahr, auch amazon bestätigt es, überprüfen Sie hier unter "Wie verwende ich TransferManager" Abschnitt. https://mobile.awsblog.com/post/Tx1V588RKX5XPQB/TransferManager-for-Android –

+1

Der Upload wird möglicherweise viel früher beendet, als der Fortschrittsbalken anzeigt, da das System gerade viele Nachrichten in der Handler-Warteschlange verarbeitet. – Yangfan

Verwandte Themen