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



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

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

怎么做呢?知道吗?

我使用了以下内容,但大多数时候都会出错:

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

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

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

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

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

 session.setAttribute(pBytesRead);

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

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

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

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

你可以使用方法

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

并根据变量计算百分比offset

最新更新