在我的应用程序中,我想使用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
。
两者有什么区别?
我用哪一个更好?
两者之间有什么区别?
@Part is used during this scenario
,
当您有一个多部分请求并且您事先知道需要发送到服务器的文件数量时,您可以使用@part注释声明它。
@PartMap is used during this scenario
,当您不知道必须以相同的密钥发送到服务器的部件数量时,
我们使用@PartMap注释
现在回答你的问题,我用哪一个更好?
如果您有一组必须上传的限制图像,请使用@Part方法,否则请使用@PartMap。
您可以查看 retrofit 2 文档以了解 part 和 PartMap 之间的差异:
用于上传文件的零件和零件图之间的差异
改造文档:如果只需要用文件传递单个或两个描述,则可以将其声明为服务中的@Part。 这适用于小型用例,但是如果您需要发送多个属性,它会变得非常混乱,特别是如果不是所有属性都始终设置。
Retrofit 提供了一个简单的解决方案,这使得上传非常可定制:@PartMap. @PartMap 是请求参数的附加注释,它允许我们指定在运行时发送的数量和部件。如果您的表单很长,但实际上只发送了其中的几个输入字段值,这将非常有用。