You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中OkHttp3多文件上传仅最后一个文件成功问题排查

解决OkHttp3批量上传文件仅最后一个成功的问题

我刚仔细看了你的代码,发现两个关键问题导致只有最后一个文件能成功上传,咱们一步步来解决:

问题1:重复添加同一个文件

你的for循环里写了两行完全一样的body.addFormDataPart("files", ...),这会把同一个文件重复添加到请求里,不仅浪费带宽,还可能让服务器解析逻辑混乱,先把其中一行删掉。

问题2:服务器未识别多文件数组

绝大多数后端框架(比如PHP、Spring Boot)需要你把文件字段名写成files[]而非files,这样服务器才会识别这是一个文件数组,进而接收所有上传的文件。如果只用files,服务器通常只会保留最后一个传入的文件,这就是你遇到的核心问题。

修正后的核心代码

for (int i = 0; i < file.length; i++) {
    Log.d(TAG, "TaskAdd: File " + file[i]);
    if (file[i].exists()) {
        Log.d(TAG, "TaskAdd: "+i);
        // 把字段名改为"files[]",且只添加一次文件
        body.addFormDataPart("files[]", file[i].getName(), 
                RequestBody.create(MediaType.parse("image/*"), file[i]));
        Log.d(TAG, "TaskAdd: "+ body.getClass().getName());
    } else {
        Log.d(TAG, "TaskAdd: No file found");
    }
}

额外优化提示

  • 你用的MediaType.parse("Image/*")大小写不规范,建议改成小写的"image/*",避免部分解析器出现识别问题。
  • 可以在构建完requestBody后打印requestBody.size(),确认所有文件都被正确添加到请求体中。
  • 记得和后端开发确认接口确实支持files[]字段的多文件上传,要是后端是自定义解析逻辑,需要对应调整字段名。

这样修改后,服务器就能正确接收所有上传的文件了,你可以测试看看效果。

内容的提问来源于stack exchange,提问作者user8660752

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:40:23