2016-09-23 4 views
1

Asynctaskを使用してURLからファイルをダウンロードしようとしています。 doInBackground()メソッドでは、このようにファイルサイズを取得します。URLのファイルサイズが、ストレージ内のダウンロードファイルと異なる

lenghtOfFile = conection.getContentLength(); 

これは整数値を返します。今、ダウンロードが続けられ、ファイルは完全にダウンロードされ、sdcardに書き込まれます。

私のpostExecute()では、ファイルのサイズをダウンロードしたファイルのサイズとURLから比較したいという問題があります。

@Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 

     //check if the file was download and know how much of it 
     //was downloaded, so as to update ui accordingly 
     if(file.exists()){ 

      Log.e("apiFileSize", String.valueOf(lenghtOfFile)); 
      Log.e("downloadFileSize", String.valueOf(file.length())); 

      //check if the file was completely downloaded 
      if(lenghtOfFile == file.length()){ 
        .... 

あなたは、私は両方の値を記録し、彼らはダウンロードが最後まで走り、ファイルが完全にダウンロードされていても同じではありません見ることができるように。ローカルストレージ(sdcard)からのファイルは、URLのファイルサイズより大きくなります。私は彼らが平等であることを期待しています、なぜこれが起こっていますか?私に何ができる?

以下はログの結果です。

09-23 22:44:48.203 26594-26594/com.mobile.soullounge E/apiFileSize﹕ 1298573 
09-23 22:44:48.204 26594-26594/com.mobile.soullounge E/downloadedFileSize﹕ 2696392 

ありがとうございます。

+0

以下の回答はあなたのために機能しますか?もし受け入れる気があるなら? –

答えて

1

IVはあなたがデフォルトでHttpURLConnection

、サーバはgzip圧縮を使用し、それが自動的にgetInputStream()の発信者に対してデータを解凍HttpURLConnectionの要求のこの実装を使用していることを想定しました。 TheAfore getContentLength()は、ファイルのサイズを決定するために使用することはできません。

しかし!次のように圧縮を無効にすることができます。

サーバーもこのようなケースを適切に処理するように設定する必要があります。

+0

これはいくつかの洞察です。私がしたことは、私のAPIオブジェクトにファイルサイズのプロパティを追加することでした。このサイズは、オブジェクトの作成時に計算されます。クライアント側でアクセスできるようになりました。 –

関連する問題