android-在文件上传过程中显示进度条

我有一个异步任务,应该在文件上传过程中显示进度.一切正常,只是看起来它确实非常快地完成了文件上传,然后等待100%等待.

我追溯到

URL url = new URL(urlServer);
connection = (HttpURLConnection) url.openConnection();

// Allow Inputs & Outputs
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);

// Enable POST method
connection.setRequestMethod("POST");

connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);

outputStream = new DataOutputStream(connection.getoutputStream());
outputStream.writeBytes(twoHyphens + boundary + lineEnd);
outputStream.writeBytes("Content-disposition: form-data; name=\"Filedata\";filename=\"" + pathToOurFile + "\"" + lineEnd);
outputStream.writeBytes(lineEnd);
long totalBytesWritten = 0;
while (bytesRead > 0) {
    outputStream.write(buffer, 0, bufferSize);
    outputStream.flush();
    if (mCancel) { throw new CancelException(); }

    totalBytesWritten += bufferSize;
    if (mProgressDialog != null) { 
            mProgressDialog.setProgress(Integer.valueOf((int) (totalBytesWritten / 1024L))); 
    }

    bytesAvailable = fileInputStream.available();
    bufferSize = Math.min(bytesAvailable, maxBufferSize);
    bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
outputStream.writeBytes(lineEnd);
outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

// Responses from the server (code and message)
int serverResponseCode = connection.getResponseCode();

我注意到的是,直到最后一行获取响应代码为止,并没有真正的延迟.我认为正在发生的事情是数据正在被缓冲,因此看起来它已经上传了数据,但实际上并没有-它只是缓冲了它.然后,当我进入getResponseCode()调用时,别无选择,只能完成上传获取上传状态.有没有什么办法可以使其实际沿途上传,这样我就可以获得合理的进步?

解决方法:

这就是HTTP Post设计的工作方式,因此不要指望它为您提供进度详细信息.

您可以使用市场上几种文件上传器组件之一.他们内部使用Flash或Silverlight或iframe来显示进度.

http://dhtmlx.com/docs/products/dhtmlxVault/index.shtml

http://www.element-it.com/multiple-file-upload/flash-uploader.aspx

如果您稍微搜索一下,就会发现很多这样的其他人.

他们在内部使用原始IO而不是http发布来处理多个文件和进度通知.雅虎和谷歌也使用这种技术来制作邮件附件.

如果您真的很喜欢冒险,可以重新制作轮子-即编写自己的组件.

编辑:

请指定您是否要在Windows桌面应用程序或Web应用程序中执行此操作.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...