gpt4 book ai didi

实际发送字节的Java HttpUrlConnection状态

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:19 25 4
gpt4 key购买 nike

我为我对 URLConnections 的基本 GET 和 POST 请求实现了一个 WebRequest 类。

其中一个功能是提交文件 - 现在我想计算并显示上传文件的进度 - 但我不知道该怎么做:

    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 协议(protocol)实现的情况下做到这一点?

谢谢

最好的问候亚光

最佳答案

你必须设置 conn.setChunkedStreamingMode(-1);//使用默认 block 大小

如果不是,HUC 缓冲整个数据只是为了知道将哪个值设置为 Content-Length。您实际上是在监视缓冲过程。

作为替代方案,您可以计算多部分正文的大小(祝您好运!)并调用 conn.setFixedLengthStreamingMode(lengthInBytes)

您可以在 HttpUrlConnection multipart file upload with progressBar 上找到更多信息

关于实际发送字节的Java HttpUrlConnection状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22628825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com