Android Retrofit2 中 Part 和 PartMap 的区别

Difference between Part and PartMap in Retrofit2 in Android

在我的应用程序中,我希望 上传 图片从 phone 到 serverRetrofit2
对于这项工作,我从互联网上找到了一些来源,但在一个来源中使用这个:

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

两者有什么区别?

我用哪个比较好?

您可以查看 retrofit 2 文档以了解 part 和 PartMap 之间的差异:

Differences between Part & PartMap for uploading files

改造文档: 如果您只需要通过一个文件传递一个或两个描述,您可以在您的服务中将其声明为@Part。 这对于小型用例非常有用,但如果您需要发送多个属性,它会变得非常混乱,尤其是在并非所有属性都始终设置的情况下。

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

What's the difference between the two?

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

@PartMap is used during this scenario,
当您不知道必须在同一密钥下发送到服务器的部件数量时,我们使用@PartMap annoation

Now to answer your question Which one do I use better?

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