问题描述
我正在尝试通过Android中的Retrofit将一些多部分表单数据发布到Web服务。 Web服务的API希望将以下参数作为多部分表单数据的字段传递:
Name Type
company_id text/plain
image image/*
它还希望将授权令牌作为查询字符串参数传递。
所以我已经定义了我的API接口调用,如下所示:
@Multipart
@POST("/companies/uploadImage")
@Headers({
"Content-Type: multipart/form-data","Accept: application/json"
})
Call<ServerResponse> companyUploadImage( @Part("company_id") RequestBody companyId,@Part MultipartBody.Part file,@Query("token") String token);
RequestBody companyId = RequestBody.create(MediaType.parse("text/plain"),LocalStorage.getInstance().getCompanyId());
File file = new File(postPath);
MultipartBody.Part image = MultipartBody.Part.createFormData("image",file.getName(),RequestBody.create(MediaType.parse("image/*"),file));
Call<ServerResponse> uploadProfileImage = router.companyUploadImage(companyId,image,token);
uploadProfileImage.enqueue(new Callback<ServerResponse>() {
@Override
public void onResponse(Call<ServerResponse> call,Response<ServerResponse> response) {
Log.e("Upload Profile Image: ",response.body().getMessage());
}
@Override
public void onFailure(Call<ServerResponse> call,Throwable t) {
Log.e("Upload Profile Image Error: ",t.getMessage());
}
});
请求已成功发送到服务器,因此不会发生网络异常,但是在服务器端空接收到多部分表单值company_id和image
有什么主意吗? 谢谢!
解决方法
我设法解决了这个问题。看来解决方案就像从API接口方法中删除@Header注释一样简单。所以现在看起来像这样:
@Multipart
@POST("/companies/uploadImage")
Call<ServerResponse> companyUploadImage( @Part("company_id") RequestBody companyId,@Part MultipartBody.Part file,@Query("token") String token);
也许有人会对这篇文章有所帮助。