我遇到了Okhttp + Node.js强大的服务器端大文件上传的问题。目前,上传适用于小于100Mb的文件,但无法上传较大的文件。对于较大的文件,onprogress事件服务器端被激发,直到99%的进度,无论文件大小如何,然后它停止,报告请求中止,并且onfile事件不被激发。
已经尝试了超时解决方法,甚至定义了一个自定义SocketFactory来手动设置套接字保持连接和sotimeout。
所以,我被困在这里了。任何帮助都将不胜感激。
CustomSocketFactory MySocketFactory = new CustomSocketFactory();
OkHttpClient client = new OkHttpClient.Builder()
.socketFactory(MySocketFactory)
.readTimeout(largenumber, TimeUnit.SECONDS)
.writeTimeout(largenumber, TimeUnit.SECONDS)
.connectTimeout(largenumber, TimeUnit.SECONDS)
.build();
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("nombre_file", file_pais.getName())
.addFormDataPart("nombre_pais", pais.getName())
.addFormDataPart("file", file_pais.getName(),
RequestBody.create(MediaType.parse("application/octet-stream"),
new File(filepath)
.build();
Request request = new Request.Builder()
.url(server_url)
.post(requestBody)
.build();
Call call = client.newCall(request);
Response response = call.execute();
response.body().close();发布于 2020-05-11 05:49:25
使用snoopy api的方法太简单了:如果排除标识符定义,则只有一行代码:)
URI uri = ...;
Path fileToUpload = ...;
Snoopy.builder()
.config(SnoopyConfig.defaults())
.build()
.post(uri)
.followRedirects(true)
.failIfNotSuccessfulResponse(true)
.body(fileToUpload)
.consumeAsString();https://bitbucket.org/abuwandi/snoopy
在大型文件上进行了测试,效果很好
https://stackoverflow.com/questions/49827065
复制相似问题