如何处理android kotlin中上传文件的retrofit socket超时?

问题描述 投票:0回答:1
 var client = OkHttpClient()
            val builder = OkHttpClient.Builder()
            val gson = GsonBuilder()
                .setLenient()
                .create()

                builder.addInterceptor(AddCookiesInterceptor(mcontext))
                builder.addInterceptor(ReceivedCookiesInterceptor(mcontext))
                builder.callTimeout(100,TimeUnit.SECONDS)

            client = builder.build()
            retrofit = Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(client)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
 //                   .addConverterFactory(ScalarsConverterFactory.create())
                .build()

这是我的retrofit客户端服务构建器。对于普通的api函数,用json响应回调就可以了。对于大文件的上传,是否需要修改?

在目前的情况下,上传20 mb的数据,在慢速网络连接中需要更多的时间,这将返回一个套接字超时异常。

以多段体上传

 var fileBody : ProgressRequestBody? = null
   fileBody = ProgressRequestBody(file,"*/*",this@CaseFileUploadFragment)
        var fileToUpload: MultipartBody.Part = 
   MultipartBody.Part.createFormData("image",file.name, fileBody)
        var filename : RequestBody = 
    RequestBody.create(MediaType.parse("text/plain"),file.getName())

以下是使用的函数

 @Multipart
    @POST("{urlMpString}")
    fun uploadFile(
        @Path ("urlMpString") urlEndString : String, @Part file: MultipartBody.Part, @Part("file") requestBody: RequestBody,
        @Part("apiInfo") `object1`: JsonObject,  @Part("parameters") `object2`: JsonObject
    ): Call<JsonObject>

小数据文件一切正常。任何建议和帮助都将被感激。谅谅

android kotlin file-upload retrofit2 multipartform-data
1个回答
0
投票

试试下面的okHttpClient代码

OkHttpClient okHttpClient = new OkHttpClient.Builder()  
    .connectTimeout(5, TimeUnit.MINUTES)
    .readTimeout(30, TimeUnit.SECONDS)
    .writeTimeout(15, TimeUnit.SECONDS)
    .build();
© www.soinside.com 2019 - 2024. All rights reserved.