【发布时间】:2013-08-08 15:14:57
【问题描述】:
Android 开发者博客推荐使用HttpURLConnection 而不是apache 的HttpClient
(http://android-developers.blogspot.com/2011/09/androids-http-clients.html)。我接受建议
并在报告文件上传进度时遇到问题。
我获取进度的代码是这样的:
try {
out = conncetion.getOutputStream();
in = new BufferedInputStream(fin);
byte[] buffer = new byte[MAX_BUFFER_SIZE];
int r;
while ((r = in.read(buffer)) != -1) {
out.write(buffer, 0, r);
bytes += r;
if (null != mListener) {
long now = System.currentTimeMillis();
if (now - lastTime >= mListener.getProgressInterval()) {
lastTime = now;
if (!mListener.onProgress(bytes, mSize)) {
break;
}
}
}
}
out.flush();
} finally {
closeSilently(in);
closeSilently(out);
}
无论文件大小如何,此代码的执行速度都非常快,但文件实际上仍在上传到服务器 util 我从服务器获得响应。当我调用out.write() 时,HttpURLConnection 似乎将所有数据缓存在内部缓冲区中。
那么,我怎样才能获得实际的文件上传进度?似乎httpclient 可以做到这一点,但是
httpclient 不是首选...有什么想法吗?
【问题讨论】:
-
作为不使用 apache 客户端的明智开发人员之一,您获得了惊人的 +1。在这个网站上以 apache 客户端的名义看到了一些 Android 中最糟糕的网络决策。其次,通常进度与上传大文件有关。你的文件有多大?如果是这样,分块传输编码是否适合您的文件?
-
@Tom 我的应用需要支持上传不大于30m的文件,而服务器端现在不支持分块传输编码...
-
@Toki 这是旧的,但如果你想知道你在第 2 行拼错了连接。
标签: android upload httpclient httpurlconnection progress