首页 > 解决方案 > 如何在 Retrofit Android 中随文件一起发送数据

问题描述

我用一个文件向服务器发送一些数据,下面是我的代码

val fileReqBody = pwdFile.asRequestBody("*/*".toMediaTypeOrNull())
        val part = MultipartBody.Part.createFormData("pwdfile", pwdFile.name, fileReqBody)

        var registerDataService = RetrofitInstance.buildService(RegisterDataService::class.java)

        var call: Call<Object> = registerDataService.registerAccount(
            userName, email, firstName,
            lastName, srpSyncPass, deviceId,
            deviceType, deviceName, pubKey, part
        )

        call.enqueue(object : Callback<Object> {
            override fun onResponse(call: Call<Object>, response: Response<Object>) {
                Log.v("retrofit", call.toString() + ", " + response.body())

            }

            override fun onFailure(call: Call<Object>?, t: Throwable?) {
                Log.v("retrofit", "call failed")

            }

        })

我的 RegisterDataService 代码如下

interface RegisterDataService {

    @Multipart
    @POST("user/account/")
    fun registerAccount(@Part("username") username: String,
                        @Part("email") email: String,
                        @Part("firstname") firstName: String,
                        @Part("lastname") lastName: String,
                        @Part("srppass") srppass: String,
                        @Part("deviceid") deviceId: String,
                        @Part("devicetype") deviceType: Int,
                        @Part("devicename") deviceName: String,
                        @Part("pubkey") pubKey: String,
                        @Part pwdFile: MultipartBody.Part): Call<Object>

}

我没有得到正确的结果

但是邮递员的工作正常,如下图所示。

在此处输入图像描述

通过邮递员,它工作正常,有人可以帮助我在哪里做错了吗?

我用 Multipart 发送的文件。

标签: androidretrofitretrofit2

解决方案


用这个:

 @Multipart
   @POST("api/events/")
   Observable<Event> postEvent(

           @Part("name") RequestBody name,
           @Part("description") RequestBody description,    
   );

and request body,
 RequestBody requestBodyName = RequestBody.create(text, name);
 RequestBody requestBodyDescription = RequestBody.create(text, description);

then,
  return apiService.postEvent(requestBodyName,requestBodyDescription);

推荐阅读