【问题标题】:Android Retrofit Upload File with authorization Body带有授权正文的 Android 改造上传文件
【发布时间】:2018-07-27 07:30:51
【问题描述】:

我正在使用改造连接到在 POST 数据中需要授权令牌的服务器。请求示例:

https://adress/inboxes
POST data:
token=jasdf807gb123uy40bviubva08sdyv123&message_id=1&

我使用这样的方法并且效果很好:

@POST("/inboxes")
    Call<InboxesResponse> getInbox(@Header("Authorization") String authorization, @Header("Content-Type") String contentType, @Body RequestBody body);

我将token等参数放入RequestBody:

RequestBody body =
                RequestBody.create(MediaType.parse("text/plain"), text.toString());

这一切都很好。但我不知道如何使用文件上传方法:

Example:
https://adress/fileUpload
POST data:
token=jasdf807gb123uy40bviubva08sdyv123
File body

所以我需要使用MultipartBody.Part file 来上传文件,但是如何将 MultipartBody 与包含令牌的 RequestBody 结合起来?或者如何正确地做到这一点?我很困惑..

【问题讨论】:

标签: android retrofit okhttp


【解决方案1】:

好的,答案是:

 @Multipart
    @POST("/fileUpload")
    Call<ResponseBody> uploadFile(@Header("Authorization") String authorization,
                                  @Part("token") RequestBody token,
            @Part MultipartBody.Part file
    );

【讨论】:

    【解决方案2】:

    这个例子对我有用。

    @Multipart
    @Headers("Accept: application/json")
    @POST("reports/new")
    suspend fun registerReport(@Header("Authorization") access_token:String,
                               @Part("description") description: RequestBody,
                               @Part photo: MultipartBody.Part
    ) : RegisterResponse
    

    如你所见,access_token不一定是RequestBody类型,你可以传递header,他的类型可以是String。

    【讨论】:

      猜你喜欢
      • 2017-12-08
      • 2015-09-29
      • 2019-03-26
      • 2021-10-13
      • 2022-08-19
      • 1970-01-01
      • 2012-05-15
      • 2017-10-11
      • 2016-10-11
      相关资源
      最近更新 更多