2016-05-15 6 views
0

amazon s3にファイルをアップロードする際に問題が発生しています。私はtransferUtilityに加えてTransferListenerを使っています。正確な問題は、onProgressChangedメソッドがまったく呼び出されないことです。時にはうまくいっています。大きなファイルをアップロードしようとしているときに問題が発生していることがわかりました。だからここで私が試した方法です。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は転送されたバイト数です。これをonProgressChangedメソッドの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を使用した大容量ファイルのアップロードでは再開機能はありませんが、サイズの大きい複数の部分に大容量ファイルを断片化して1つずつアップロードして再アセンブリすることができますそれらがS3に入るとそれらは一度。これを言って、最新のSDK 2.4.2の最新の機能をいくつか紹介します。新しいバージョンのSDKを使用してTransfer Utilityを設定してみてください