2017-08-03 9 views
0

Azureクラウド空間にデータをアップロードする予定です。これを行うには、自分の都合でazure-storage-androidライブラリを使用します。アップロードは正常に機能しますが、アップロードの進捗状況を管理しようとしているときに問題が発生しています。私はかなりの解決策を見いださなかった。私のアップロード要求でこのctxtオブジェクトを使用してAzureファイルクラウドストレージへの進捗状況をアップロードする

OperationContext ctxt = new OperationContext(); 

ctxt.getRequestCompletedEventHandler().addListener(new StorageEvent<RequestCompletedEvent>() { 
    @Override 
    public void eventOccurred(RequestCompletedEvent eventArg) { 
     totalUploaded = totalUploaded+rangeInBytes; 
     int progressPercentage = (int) ((float)totalUploaded/(float) totalLength * 100); 
     //range is 4Mb, totalUploaded and totalLength are initialized higher in the method. 
     //here, insert a callback to display the progress 

     publishProgress(progressPercentage); 
    } 
}); 

destinationFile.upload(new FileInputStream(file),file.length(),null,null,ctxt); 

私の最初のアイデアは、コードのこの作品でした。それは動作しますが、進捗状況はアップロードされた4MB(デフォルト値)ごとにアップロードされます。これは、ファイルのサイズが5-10MB程度であるため問題になります。それは滑らかではない進歩を作ります。私はその4MBの範囲サイズを下げようとしましたが、実際にはアップロード速度が大幅に低下しました。どうして?私は確信していませんが、レイテンシを作成する4つのX MBではなく、すべてのX MBで実行される承認プロセスがあると推測しています(もう一度、わかりません。

私の質問は、ファイルクラウド共有サービスのアップロード時に進捗状況を追跡する効率的な方法はありますか?私はREST Apiを使ってマルチパートアップロードを使用することを考えましたが、their APIを見ましたが、これを行うことはできませんでした。

答えて

0

Iは、次いで、Iは単位進行がクラスCloudFileで定義するstreamWriteSizeInBytesの値に依存して、デフォルトとしてConstants.MAX_BLOCK_SIZE値に等しくなるConstants.DEFAULT_STREAM_WRITE_IN_BYTES値に等しいことが見出さ、Android向けAzureストレージSDKのソースコードを見直し4MB。

ユニットの進捗サイズを小さくする場合は、メソッドを実行する前にCloudFile.setStreamWriteSizeInBytes(int streamWriteSizeInBytes)を使用してください。

希望します。

関連する問題