2016-05-15 56 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