gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:34:29 24 4
gpt4 key购买 nike

我有一个异步任务,它应该在文件上传期间显示进度。一切正常,除了它看起来非常非常快地完成了文件上传,然后它就坐在那里等待 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 设计的工作方式,所以不要指望它会为您提供进度详细信息。

您可以使用市场上提供的几种文件 uploader 组件之一。他们在内部使用 flash 或 silverlight 或 iframe 来显示进度。

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

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

如果你谷歌一下,你会发现很多这样的人。

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

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

编辑:

请说明您是想在 Windows 桌面应用程序还是 Web 应用程序中执行此操作。

关于android - 在文件上传过程中显示进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12346096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com