java - Retrofit Post Multipart 表单数据值为空
问题描述
我正在尝试通过 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);
之后这就是我在自定义类中调用上述 API 接口方法的方式:
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());
}
});
请求成功发送到服务器,因此没有出现网络异常,但是服务器端接收到的 multipart 表单值 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);
也许有人会发现这篇文章很有帮助。
推荐阅读
- python - 为什么 if 语句中的“或”运算符不起作用?
- excel - 这些条不会在我的 Excel 图表中排列是否有原因?
- javascript - 如何为 React Bootstrap 表单自动设置高度
- wpf - ObservabaleCollection 添加/删除不会更新 xaml 端的 ItemsControl
- python - 清除所有数据和画布以重绘底图
- python - 在 while 循环中更新 python 字典的问题
- r - 在带有表的映射函数中保留列名
- r - R:数据表:是否可以在没有行名的情况下呈现所有输出?
- python - 如何用其他字符串列表替换字符串?
- reactjs - TinyMCE 5:当编辑器被禁用时,是否有一种开箱即用的方法来启用工具栏按钮?