使用Http连接上传文件并计算上传字节的百分比

时间:2012-05-29 07:32:15

标签: java blackberry java-me

我想使用HttpConnection将文件上传到服务器。所以我想制作一个表示上传作业百分比的GaugeField。

但我在OutputStream中找到的所有内容都是.flush(),它会将整个输出流一次刷新到服务器。所以我无法计算在特定时间上传的字节数

如何制作?有什么想法吗?

我使用了以下内容,但大部分时间都出错:

           while (position < length) {
                try {
                    os.write(postDataBytes, position, length100);
                    position += length100;
                    int location = position * 100 / length;
                    gaugeField.setValue(location);
                    os.flush();
                }
            }

2 个答案:

答案 0 :(得分:2)

有两种方法可以做到:

  • 客户端:识别客户端写入的字节数(这不是正确的方法,因为您不知道数据是否实际到达服务器)。在这种情况下,您应该通过提供自定义SocketFactory并包装底层套接字来计算写入的字节数。
  • 服务器端:最好的方法是保持服务器在会话中读取的数据计数,让客户端发出请求以了解上传进度。

以下是实现此目标的步骤:

1)在服务器端的上传Servlet中更新会话中的读取字节。

 session.setAttribute(pBytesRead);

2)编写一个servlet UploadProgressServlet,它将进度写入响应。

response.getOutputStream().write(session.getAttribute("uploadprogress"));

3)让客户端向UploadProgressServlet发出请求以了解进度

您还可以使用具有Progress Listener支持的Apache Commons Upload API。在这种情况下,您必须以多部分格式编写数据。

答案 1 :(得分:0)

您可以使用方法

write(byte[] b, int off, int len); 

并根据offset变量计算百分比。