2016-08-08 67 views
0

我想在Web服務期間顯示上傳文件大小。所以我已經使用了以下兩個鏈接HttpClient Post with progress and MultipartEntityBuilder,gradle-hockeyapp-plugin,其中我找到了ProgressHttpEntityWrapper.java類。使用這個類我找到了上傳文件的大小。使用下面的方法實際的文件大小和上傳文件大小有所不同android

public String getFileSize(long size) { 
     if (size <= 0) 
      return "0"; 
     final String[] units = new String[] { mContext.getResources().getString(R.string.bytes), mContext.getResources().getString(R.string.kilo_bytes), mContext.getResources().getString(R.string.mega_bytes), mContext.getResources().getString(R.string.giga_bytes), mContext.getResources().getString(R.string.tera_bytes) }; 
     int digitGroups = (int) (Math.log10(size)/Math.log10(1024)); 
     return new DecimalFormat("#,##0.#").format(size/Math.pow(1024, digitGroups)) + " " + units[digitGroups]; 
    } 

但它會給出比原始文件大小錯誤的文件大小比較。實際文件大小和上傳文件大小都不相同。

例如,我的實際文件大小爲297.1 KB,但顯示的文件總大小爲365.5 KB。爲什麼實際的文件大小和上傳總文件大小有所不同。你能不能告訴我任何想法?

+0

你的意思是你的函數返回的字符串與你傳遞的字符長度不符? – wutzebaer

+0

@wutzebaer不,請檢查第二個鏈接,您將在其中找到ProgressHttpEntityWrapper類。在那個類中,它返回方法getCurrentProgress()內的總字節數。它是不正確的。它與實際文件大小不同。 – Sangeetha

+0

可能偏移+ len是更大的tan b.length,因此只有len的一部分被寫入?# – wutzebaer

回答

-1

好的,謝謝你的回覆。另外我發現爲什麼確切的文件大小沒有返回。它的,因爲我們正在分配此回調,以整個實體像下面,

ProgressHttpEntityWrapper.ProgressCallback progressCallback = new ProgressHttpEntityWrapper.ProgressCallback() { 

    @Override 
    public void progress(float progress) { 
     //Use the progress 
    } 

} 

在下面的代碼我指定這個進度回調到我的整個實體

httpPost.setEntity(新ProgressHttpEntityWrapper(entityBuilder。 build(),progressCallback));

其中此實體不僅包含我的文件。它還包含我的縮略圖文件和其他參數。所以尺寸會有所不同。所以我添加了縮略圖大小的文件大小。它接近我的上傳文件大小,剩下的字節將用於其他參數。現在我解決了它。

+0

不是答案,構成問題一部分的材料必須在問題本身**中發佈,而不是通過鏈接發佈。在這種情況下,顯然你的複製代碼是錯誤的,而不是你的nunber格式代碼。 – EJP