android - 如何使用 Fuel for Kotlin 发布多部分/表单数据?

标签 android http kotlin multipartform-data

我需要向服务器发送 POST 请求。我应该传递一些参数和图像。我可以通过 Postman 执行此操作,但我无法使用 Fuel 在我的 Android 应用程序(最新的 SDK)上执行此操作。

这是我正在使用的代码:

val formData = listOf("name" to "name")
val (_, _, result) = Fuel.upload("http://10.0.2.2:3000/test", parameters = formData)
                         .source { request, url -> imageFile } // type is File
                         .responseObject<CustomResponse>()

这是 postman 截图: enter image description here

我无权访问后端代码,只能访问一些日志。看起来请求正文是空的,文件也没有上传。我怎样才能做到这一点?我很茫然。

我还尝试将参数作为 jsonBody 传递,这确实提交了正文,但内容类型不是 multipart/form-data 并且图像仍然丢失。

此 JS 代码有效:

let formData = new FormData();
formData.append('name', 'name');
formData.append('image', this.file);
axios.post(`${API_URL}/test`, formData, {
    headers: {
        'Content-Type': 'multipart/form-data'
    }
}).then(console.log).catch(console.log)

编辑:我也尝试过将文件作为 DataPart 传递,但仍然没有。

最佳答案

经过一番努力,我发现了可行的方法:

val file = FileDataPart.from("path_to_your_file", name = "image")
val (_, _, result) = Fuel.upload("http://10.0.2.2:3000/test")
                 .add(file)
                 .responseObject<CustomResponse>()

在我的案例中我不需要名称部分,但我会尝试添加 InlineDataPart

关于android - 如何使用 Fuel for Kotlin 发布多部分/表单数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54172694/

相关文章:

java - Android - 发送 HDMI CEC 命令到电视 - minix - libCEC

android - 在 Android Studio 中使用 ActivityInstrumentationTestCase2 横向测试 Android 应用程序

android - 每次返回 fragment 时都会调用livedata观察器

http - 当用户在浏览器中返回时,是否有一种跨浏览器的方法可以使上一页实际从服务器加载内容?

kotlin - kotlin 中的类分组

intellij-idea - kotlin-jpa 插件不为 Junit 测试创建空构造函数

android - React Native : AppState. addEventListener 在点击通知时在恢复时注册重复事件

android - 单击时需要用户名消失

c - 如何删除此 HEADER HTTP?

http - Golang http。获得太多重定向