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
相关产品推荐
相关产品推荐

