3

我想使用 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();
                }
            }
4

2 回答 2

2

有两种方法可以做到这一点:

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

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

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

 session.setAttribute(pBytesRead);

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

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

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

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

于 2012-05-29T07:45:25.040 回答
0

你可以使用方法

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

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

于 2012-05-29T07:47:42.397 回答