我实现了一个WebRequest类,用于处理基本的GET和POST请求以及URLConnections。其中一个功能是提交文件。现在我想计算并显示上传文件的进度,但我不知道该如何做到这一点。
在这段代码中,您可以看到将字节数计算到OutputStream输出流的基本操作。但由于在打开连接的InputStream(或读取状态码)之前,请求甚至没有发送到服务器,因此这种字节计数是完全无用的,只显示请求准备过程的进度。
所以我的问题是: 如何监视实际发送到服务器的当前字节数?我已经检查了相应类(HttpUrlConnection)的getInputStream的Java源代码,试图理解何时以及如何将实际字节写入服务器...但是没有得出结论。
有没有一种方法可以在不编写自己的http协议实现的情况下实现这一点?
谢谢
最好的问候 马特
for (KeyFilePair p : files) {
if (p.file != null && p.file.exists()) {
output.writeBytes("--" + boundary + "\n");
output.writeBytes("Content-Disposition: form-data; name=\""
+ p.key + "\"; filename=\"" + p.file.getName() + "\"\n");
output.writeBytes("Content-Type: " + p.mimetype
+ "; charset=UTF-8\n");
output.writeBytes("\n");
InputStream is = null;
try {
long max = p.file.length();
long cur = 0;
is = new FileInputStream(p.file);
int read = 0;
byte buff[] = new byte[1024];
while ((read = is.read(buff, 0, buff.length)) > 0) {
output.write(buff, 0, read);
output.flush();
cur += read;
if (monitor != null) {
monitor.updateProgress(cur, max);
}
}
} catch (Exception ex) {
throw ex;
} finally {
if (is != null) {
try {
is.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
}
output.writeBytes("\n--" + boundary + "--\n");
在这段代码中,您可以看到将字节数计算到OutputStream输出流的基本操作。但由于在打开连接的InputStream(或读取状态码)之前,请求甚至没有发送到服务器,因此这种字节计数是完全无用的,只显示请求准备过程的进度。
所以我的问题是: 如何监视实际发送到服务器的当前字节数?我已经检查了相应类(HttpUrlConnection)的getInputStream的Java源代码,试图理解何时以及如何将实际字节写入服务器...但是没有得出结论。
有没有一种方法可以在不编写自己的http协议实现的情况下实现这一点?
谢谢
最好的问候 马特