2015-07-03 32 views
10

Amazon rehberini takip ederek Amazon S3'e dosya yüklemeyi uyguladık ve çok yavaş olduğunu fark ettim. 20kb civarında basit bir png dosyası yüklemek yaklaşık 10 saniye sürüyor.Dosyayı Android'den Amazon S3'e yükle

Başlangıçta sorunun iş parçacıkları ile ilişkili olduğunu düşündüm ve görüntü yüklemek için bir AsyncTask uyguladım, ancak sorun hala var. Görüntüyü yüklemek için kullanılan kod aşağıdadır.

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

Bu sorunu çözmek için herhangi bir fikrin var mı? Bu CPU çekiç diğer konu bulunmuştur çalıştırmak için zaman vermek Thread.sleep ekleyerek

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

deneyin gidiyor

+1

Saati nasıl ölçüyorsunuz? Yükleme hızı ağ kalitesine bağlı olarak değişebilir. Bağlandığınız son noktadan da etkilenir. Örneğin, Avrupa'da iseniz ve bize bir-doğu-1 (ABD Virginia) dosya yüklüyorsanız, bu yavaş olabilir. Hızınızı artırabilecek en yakın son noktayı seçin. – Yangfan

+2

Şu anda Avrupa'dayız ve Virginia'daki örneklerimiz var. Belki de sorun, bölge kodu değiştiğinden, gönderilen kod doğrudur. Gelecek planlarımızda, örneklerimizi İrlanda'ya taşıyacağız ve problemin devam edip etmediğini kontrol edeceğiz. Güncel tutulacağım – rdiaz82

+2

Amazon Route 53'e (https://aws.amazon.com/route53/) baktınız mı? Bu, konumunuza göre mevcut olan en yakın S3 veya AWS kaynağına yönlendirmenizi sağlayan DNS tabanlı bir üründür. – StephenG

cevap

4

:) teşekkürler.

+1

İyi nokta! Amazon S3 belgelerini izleyerek süre döngüsünü uygularım, çözümünüzle çalışacağım ve nasıl çalıştığını kontrol edeceğim. Teşekkürler! – rdiaz82

+2

@frank true, hatta amazon bunu onaylıyor, "TransferManager Nasıl Kullanılır" bölümüne bakın. https://mobile.awsblog.com/post/Tx1V588RKX5XPQB/TransferManager-for-Android –

+1

Yükleme işlemi, işleyici kuyruğunda çok sayıda ileti işlemeye devam ederken, yükleme çubuğunun gösterilmesinden çok daha erken bitirebilir. – Yangfan