【发布时间】:2016-08-08 10:25:18
【问题描述】:
我想在网络服务期间显示上传文件的大小。所以我使用了以下两个链接HttpClient Post with progress and MultipartEntityBuilder、gradle-hockeyapp-plugin,在那里我找到了ProgressHttpEntityWrapper.java 类。使用这个类我发现了上传文件的大小。使用下面的方法
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。为什么实际文件大小和上传总文件大小会有所不同。你能给我建议吗?
【问题讨论】:
-
您的意思是您的函数返回的字符串与您传递的长度不匹配?
-
@wutzebaer 不,请查看第二个链接,您可以在其中找到 ProgressHttpEntityWrapper 类。在该类中,它返回方法 getCurrentProgress() 内的总字节数。它是不正确的。它与实际文件大小不同。
-
也许 offset+len 比 b.length 大,因此只写了 len 的一部分?#
-
@wutzebaer 对不起,我听不懂你想说什么。你能解释一下吗?
-
this.transferred += Math.min(len, b.length-off)
标签: java apache-httpclient-4.x progress