You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

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

火山引擎 最新活动