2301_78915462 2023-06-27 20:21 采纳率: 33.3%
浏览 32
已结题

kotlin 多文件上传

在apifox中案例应用如下

img


fun post(fileList: MutableList<File>) {
         val client = OkHttpClient.Builder()
            .connectTimeout(60,TimeUnit.SECONDS)
            .readTimeout(60,TimeUnit.SECONDS)
            .build()
        // 创建 MultipartBody.Builder
        val requestBodyBuilder = MultipartBody.Builder().setType(MultipartBody.FORM)

        // 添加文件参数
        for (file in fileList) {
            Log.d("file123", file.toString())
            requestBodyBuilder.addFormDataPart("file", file.name, file.asRequestBody("application/pdf".toMediaType()))
        }

        val requestBody = requestBodyBuilder.build()
        val request = Request.Builder()
            .url(baseUrl)
            .post(requestBody)
            .build()
        client.newCall(request).enqueue(object : Callback {
            override fun onFailure(call: Call, e: IOException) {
                Log.d("file123",e.message.toString())
            }
            override fun onResponse(call: Call, response: Response) {
                val res = response.body?.string()
                Log.d("file123",res.toString())
            }
        })
    }

以上就是我的请求方法,但是遇到了一些问题

  1. 当OkHttpClient设置为15秒左右,在Android studio并没有到达15s,却打印出timeout的问题(也就是请求失败)
  2. 当OkHttpClient设置为60秒左右,在Android studio并没有到达15s,却打印出Connection Reset的问题(也就是请求失败)

在apifox是运行成功的,但是android是请求失败的,后台日志显示一部分成功,但是莫名中断了。(提示:当文件为一个的时候是成功的)

  • 写回答

3条回答 默认 最新

  • java入门选手 2023-06-28 09:50
    关注

    基于new bing部分指引作答:
    在Kotlin中进行多文件上传,您可以使用以下步骤:

    1. 在您的Kotlin项目中添加一个HTTP客户端库,如OkHttp或HttpClient等。这些库将帮助您进行网络请求。

    2. 创建一个HTTP POST请求,并设置正确的URL和请求头。

    3. 使用MultipartBody.Builder来构建请求主体,它可以包含多个文件。

    4. 遍历要上传的文件列表,逐个将文件添加到MultipartBody中。

    5. 发起HTTP请求,并处理响应。

    下面是一个示例代码片段,演示了如何进行多文件上传:

    import okhttp3.MediaType
    import okhttp3.MultipartBody
    import okhttp3.OkHttpClient
    import okhttp3.Request
    import okhttp3.RequestBody
    import java.io.File
    import java.io.IOException
    
    fun uploadFiles(url: String, files: List<File>) {
        val client = OkHttpClient()
    
        val requestBody = MultipartBody.Builder()
            .setType(MultipartBody.FORM)
    
        for (file in files) {
            val mediaType = MediaType.parse("application/octet-stream")
            val fileRequestBody = RequestBody.create(mediaType, file)
            requestBody.addFormDataPart("file", file.name, fileRequestBody)
        }
    
        val request = Request.Builder()
            .url(url)
            .post(requestBody.build())
            .build()
    
        try {
            val response = client.newCall(request).execute()
            if (response.isSuccessful) {
                // 处理成功上传的响应
                println("文件上传成功")
            } else {
                // 处理上传失败的响应
                println("文件上传失败")
            }
        } catch (e: IOException) {
            e.printStackTrace()
            // 处理异常情况
            println("文件上传发生错误")
        }
    }
    

    请注意,上述代码仅涉及文件上传的部分,您需要根据自己的项目实际情况进行适当的修改和调整。此外,还需要确保您已添加相应的依赖库并正确配置网络权限。

    希望对您有所帮助!

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月3日
  • 创建了问题 6月27日

悬赏问题

  • ¥20 Github上传代码没有contribution和activity记录
  • ¥20 SNETCracker
  • ¥15 数学建模大赛交通流量控制
  • ¥15 为什么我安装了open3d但是在调用的时候没有报错但是什么都没有发生呢
  • ¥50 paddleocr最下面一行似乎无法识别
  • ¥15 求某类社交网络数据集
  • ¥15 靶向捕获探针方法/参考文献
  • ¥15 很抱歉出现错误word不能启动(24),如何解决?
  • ¥15 javascript下载网络图片
  • ¥15 excel中的填充效果 对应poi的哪个对象啊