kotlin 中的改造请求@Part 和@Query android

retrofit request @Part and @Query in kotlin android

我想在改造中将图像作为表单数据发送,将用户 ID 作为参数发送 android。enter image description here我尝试了很多解决方案,但没有取得任何成功。这是我的代码和 api.

@Multipart @POST("upload/profile") fun uploadProfilePhoto(@Part image: MultipartBody.Part, @Query("userId") userId: String): Call

    val photoContent = RequestBody.create(MediaType.parse("image/*"), file)
    val photo = MultipartBody.Part.createFormData("image", file.name, photoContent)

您必须检查 uploadProfilePhoto 函数 return 类型。
它应该是 Call 并且 T 应该定义。 如果仍然得到错误信息。显示更多。像 断点调试postman

编辑

interface UploadImage{
    @Multipart
    @POST("upload/profile")
    fun upload(@Query("userId") userId: String, @Part part: 
        MultipartBody.Part) : Call<LoginSignUpGeneralResponse>
}

val call = Retrofit.Builder().baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(UploadImage::class.java)
.upload(userId,image)
call.enqueue(object : Callback<LoginSignUpGeneralResponse>{
        override fun onResponse(//params){TODO()}
        override fun onFailure(//params){TODO()}
})

我遇到了错误。实际上,当我们 post 多部分参数时,我们必须将我们的 formData 名称与 API 中的后端匹配。在我的例子中是“image/png”val photo = MultipartBody.Part.createFormData("image", file.name, photoContent)

像这样发送您的请求

val userId: RequestBody = userId.toRequestBody("multipart/formdata".toMediaTypeOrNull())

val image = file.asRequestBody("multipart/form-data".toMediaTypeOrNull())
val photo = MultipartBody.Part.createFormData("images", file.name, image)

使用此用户 ID 作为图片的请求正文和照片


@Multipart
    @POST("upload/profile")
    fun uploadProfilePhoto(
        @Part image: MultipartBody.Part,
        @Part("userId") userId: RequestBody
    ): Call<LoginSignUpGeneralResponse>