问题标签 [mimecraft]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
81569 浏览

java - how to use okhttp to upload a file?

I use okhttp to be my httpclient. I think it's a good api but the doc is not so detailed.

how to use it to make a http post request with file uploading?

my question is:

  1. how to set part name? in the form, the file should be named file1.
  2. how to add other fields in the form?
0 投票
3 回答
1749 浏览

android - 尽管有flush(),但OkHttp在上传数据之前缓冲了~800kb

我试图发布图像的上传进度,使用 okhttp 作为我的客户端和 mimecraft 上传它们以打包多部分文件。

我添加了日志以在数据写入套接字时写入字节数(如果我能正确判断,以 4kb 的块)然后上传。

问题是,虽然每次写入一大块数据时我都会在输出流上调用flush,但在将~800kb 写入输出流之前似乎什么都没有上传。一旦达到这一点,它似乎上传了大约 100kb,然后应用程序将另外 100kb 写入输出流(就像它释放的空间并且可以再写一点)并继续。

这样做的结果是(超过 1.2mb 的文件)前 800kb 几乎立即被写入/报告,然后它开始上传(通过 charles 网络软件跟踪),然后将在下一个开始读取/写入/上传 100kb几秒钟,然后一旦我将最后一个字节写入输出流,应用程序报告 100% 的上传已写入。尽管网络客户端仍在上传仍在网络缓冲区中的最后 800kb,但这是正确的,并且它会在那里再上传 5-10 秒,然后完成请求。

有没有人有过这种经验,或者知道这是否是 okhttp 中的常见问题?

干杯

编辑:如果我上传一个小于 800kb 的文件,我测试了大约 250kb 和 500kb,它们都在上传之前立即 100% 写入流,但是 3mb 的图像仍然会上传 800kb,然后以大约 100kb 的块的形式消失,并且每次上传一些内容时,写入循环都会再写入 100kb。