Fuel.upload携带表单数据上传时表单数据未发送问题求助
解决Fuel Upload同时提交表单数据和文件时表单数据丢失的问题
我之前也踩过Fuel这个上传的坑!你遇到的问题本质是:当使用upload方法并指定dataParts(文件上传部分)时,Fuel不会自动把parameters参数里的表单数据合并到multipart请求中——只有当没有dataParts的时候,parameters才会被当作普通表单提交。
问题原因拆解
Fuel的upload方法逻辑是:
- 如果只传
parameters不传dataParts:会构建application/x-www-form-urlencoded类型的请求,把参数正常放入请求体。 - 如果传了
dataParts:会强制构建multipart/form-data类型的请求,但此时只会包含dataParts里的内容,parameters里的键值对会被直接忽略。
解决方案:把表单数据也转成DataPart
要同时提交表单和文件,需要把表单参数也包装成DataPart,和文件的DataPart一起传入dataParts中:
修改后的代码示例
// 把表单参数转成DataPart列表 val formDataParts = listOf( DataPart("title", "test"), DataPart("desc", "test") ) // 文件的DataPart val filePart = listOf(DataPart(File(URL), "file")) // 合并所有部分传入upload请求 val fuelRequest = Fuel.upload(URL, method = Method.POST) .dataParts { request, url -> formDataParts + filePart }
或者你也可以更简洁地写:
val allParts = listOf( DataPart("title", "test"), DataPart("desc", "test"), DataPart(File(URL), "file") ) val fuelRequest = Fuel.upload(URL, method = Method.POST) .dataParts(allParts)
这样修改后,你的multipart请求体里就会同时包含表单字段和文件内容,再打印请求对象就能看到完整的请求结构了。
内容的提问来源于stack exchange,提问作者user3892282




