2016-05-15 92 views
0

我對着在上傳文件到Amazon S3的問題。要跟蹤上傳文件狀態,除了transferUtility之外,我還使用TransferListener。確切的問題是onProgressChanged方法有時並不會被調用。有時它工作正常。我觀察到,當我嘗試上傳較大的文件時發生問題。所以這裏是我的嘗試。Transferutility在AWS SDK

代碼:

 @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 

     Log.d("ID VALUE",String.valueOf(this.ID)); 

     if(sS3Client!=null&&this.ID==-1){ 

      Log.d("ID","InItial setup"); 

      sTransferUtility = new TransferUtility(sS3Client, this.ctx); 

      observer = sTransferUtility.upload(remotepath, file.getName(), file); 


      observer.setTransferListener(new UploadListener(this.progressBar,observer,file.getPath())); 
      observerlist.add(observer); 
     } 

    } 

和UploadListener:

private class UploadListener implements TransferListener{ 

    private ProgressBar progress; 
    private TransferObserver localobserver; 

    private int value; 
    private String file; 
    private DBoperations DB; 

    private ContentValues CV; 

    private ContentValues CV2; 

    private UploadListener(ProgressBar progressBar,TransferObserver observer,String file){ 
     this.progress=progressBar; 
     this.localobserver=observer; 
     this.file=file; 
     DB = new DBoperations(getContext()); 
    } 
    @Override 
    public void onStateChanged(int i, TransferState transferState) { 


     switch (transferState.toString()) { 
      case "IN_PROGRESS": 
      { 
       CV = new ContentValues(); 
       CV2= new ContentValues(); 

       Log.d("FILE UPLOAD","IN_PROGRESS"); 
       CV.put(DBconstants.TableConstants.F_FILE_STATUS, constants.UPLOADING); 

       DB.updateInformation(DB, DBconstants.TableConstants.TABLE_FILES, CV, DBconstants.TableConstants.F_LOCAL_PATH, this.file); 

       CV2.put(DBconstants.TableConstants.UPLOAD_ID, i); 
       DB.updateInformation(DB, DBconstants.TableConstants.TABLE_FILES, CV2, DBconstants.TableConstants.F_LOCAL_PATH, this.file); 

      } 
      break; 
      case "COMPLETED": 
      { 
       CV= new ContentValues(); 

       Log.d("FILE UPLOAD","COMPLETED"); 
       CV.put(DBconstants.TableConstants.F_FILE_STATUS, constants.UPLOADED); 

       DB.updateInformation(DB, DBconstants.TableConstants.TABLE_FILES,CV, DBconstants.TableConstants.F_LOCAL_PATH,this.file); 


      } 
      break; 

     } 
    } 
    @Override 
    public void onProgressChanged(int i, long l, long l1) { 
     updator(); 
     progress.setIndeterminate(false); 
     progress.setProgress(value); 
     Log.d(String.valueOf(i),String.valueOf(value)); 
    } 

    @Override 
    public void onError(int i, Exception e) { 

    } 
    private void updator() 
    { 
     value = (int) ((double) localobserver.getBytesTransferred() * 100/localobserver 
       .getBytesTotal()); 

    } 
} 

如何解決這個問題?

什麼是避免這類問題的最佳做法?

UPDATE:

這84是我的文件ID。 0是傳輸字節數。我將它打印到onCrogressChanged方法中的logcat中

05-15 17:24:56.640 22043-6710/? D/UploadTask: multipart upload 84 in 22 parts. 

05-15 17:24:56.649 22043-22043/? D/84: 0 

回答

1

不確定使用哪個版本。在版本2.2.15中有一個已知的錯誤,其中套接字超時未正確報告。請升級到v2.2.16。如有其他疑問,請致電https://github.com/aws/aws-sdk-android

+0

我使用2.2.15新版本傳輸工具。 – sandesh

+0

是否升級到2.2.16修復了我的問題? – sandesh

+0

理論上是。否則,請在Github上打開一個新問題。 – Yangfan

0

截至目前,我們沒有使用AWS SDK,但是,你可以嘗試破碎大文件到多個零件尺寸較小,並上傳到一個一個和大文件上傳的恢復功能重新組裝他們一旦進入S3。說這句話的,我想你指向我們最新版本的SDK 2.4.2的其中有一些新的更新功能。請嘗試使用配置SDK