使用多部分上传较大文件时,Retrofit出现套接字超时异常

4
我使用retrofit 2.0.2库和okhttp 2.3.0时,遇到了套接字超时异常的问题。我试图上传大小在500kb到1.5mb之间的图像文件,它成功上传。但当我尝试上传大于5mb的视频文件时,就会出现这个异常。
我使用以下代码设置连接:httpclient。
public static OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .connectTimeout(0, TimeUnit.SECONDS)
            .writeTimeout(0, TimeUnit.SECONDS)
            .readTimeout(0, TimeUnit.SECONDS)
            .build();

请建议我如何上传更大的文件而不会遇到这个问题。提前致谢。

一个POST方法可以有最大4MB的请求体,无论它是多部分的还是单一的。你必须使用自定义FTP提供程序或者实现自定义机制来处理这样的上传。将文件分割成块,上传到服务器,然后在服务器上合并它们并保存。 - Niraj Sanghani
2个回答

1
你可以按照以下方式以秒为单位提供时间
公共类 ApiClient {
public static final String BASE_URL = "your_url";
public static Retrofit retrofit = null;

public static Retrofit getApiClient() {
    if (retrofit == null) {
        OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
                .connectTimeout(60, TimeUnit.SECONDS)
                .readTimeout(60, TimeUnit.SECONDS)
                .writeTimeout(60, TimeUnit.SECONDS)
                .build();
        return new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(okHttpClient)
                .addConverterFactory(GsonConverterFactory.create())
                .build();


    }

        return retrofit;
}

}

我已经给了60秒。

即使我给了60秒,我仍然得到相同的错误。有没有办法在连接超时后重试? - Hari krishna
尝试将“2分钟”转换为“120秒”,如果我得到任何解决方案,我会告诉你。 - Ankit Dubey
你有找到任何解决方案吗?@Harikrishna - demo_Ashif

0

这种类型的错误可能有两个问题。

  1. 检查读写超时
val client = OkHttpClient.Builder()
    .connectTimeout(30, TimeUnit.SECONDS)
    .writeTimeout(30, TimeUnit.SECONDS)
    .readTimeout(30, TimeUnit.SECONDS)
    .build()
  1. 检查您发送的Mime类型。后端开发人员可能已在其端过滤了接受的Mime类型。请不要使用MediaType.parse(“multipart / form-data”),而是编写文件的有效Mime类型,例如image / jpgvideo / mp4
MediaType.parse("image/png")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接