我想使用 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();
}
}
最佳答案
有两种方法可以做到这一点:
- 客户端:识别客户端写入的字节(这不是正确的方法,因为您不知道数据是否真的到达了服务器)。在这种情况下,您应该通过为您提供自定义 SocketFactory 并包装底层套接字来计算写入的字节数。
- Server Side : 最好的方法是在一个session中统计server读取的数据,让client发出请求知道上传进度。
以下是实现此目的的步骤:
1) 在服务器端的 Upload Servlet 中更新 session 中读取的字节。
session.setAttribute(pBytesRead);
2) 编写一个 servlet UploadProgressServlet,它将进度写入响应。
response.getOutputStream().write(session.getAttribute("uploadprogress"));
3)让客户端向UploadProgressServlet发出请求,知道进度
您还可以使用 Apache Commons Upload具有 Progress Listener 支持的 API。在这种情况下,您必须以多部分格式写入数据。
关于java - 使用 Http 连接上传文件并计算上传字节的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10794831/