Android中Retrofit2中Part和PartMap的区别

时间:2018-05-29 05:31:09

标签: java android retrofit2 image-uploading

在我的应用程序中,我希望将上传图像从手机上传到服务器并使用Retrofit2
对于这项工作,我从互联网上找到了一些来源,但在一个来源中使用它:

public interface RetrofitInterface {
    @Multipart
    @POST("/images/upload")
    Call<Response> uploadImage(@Part MultipartBody.Part image);
}

以及以下其他来源:

public interface ApiConfig {

    @Multipart
    @POST("images/upload_image.php")
    Call<ServerResponse> upload(
            @PartMap Map<String, RequestBody> map);
}

在第一个来源中使用@Part MultipartBody.Part image,在第二个来源中使用@PartMap Map<String, RequestBody> map

两者之间有什么区别?

我使用哪一个更好?

2 个答案:

答案 0 :(得分:2)

  

两者之间有什么区别?

@Part is used during this scenario
当您有多部分请求并且您事先知道需要发送到服务器的文件时,您使用@part注释声明它。

@PartMap is used during this scenario
当您不知道必须以相同密钥发送到服务器的部分时,我们使用@PartMap annoation

  

现在回答你的问题我更好地使用哪一个?

如果您有一组必须上传的图像,请使用@Part方法,否则请使用@PartMap。

答案 1 :(得分:1)

您可以查看改装2文档,了解零件和零件之间的差异。 PartMap:

Differences between Part & PartMap for uploading files

改造文档: 如果您只需要将一个或两个描述与文件一起传递,则可以在服务中将其声明为@Part。 这适用于小用例,但如果你需要发送多个属性,它会变得非常混乱,特别是如果并非所有属性都被设置的话。

Retrofit提供了一个简单的解决方案,使上传可以自定义:@PartMap。 @PartMap是请求参数的附加注释,它允许我们指定在运行时期间发送的部分数量和部分。如果您的表单很长,但实际上只发送了一些输入字段值,这非常有用。