我如何将图像文件与我的json一起上传。
我的请求JSON以下面的格式显示。
{
"Request": {
"first_name": "Josmy",
"last_name": "J",
"profile_image_attributes": {
"image":"file"
}
}
}
在我的gson类中,我正在输入类似这样的值
public class Request implements Serializable {
@SerializedName("first_name")
private String firstName;
@SerializedName("last_name")
private String lastName;
@SerializedName("profile_image_attributes")
private MultipartBody.Part profileImageAttributes;
}
@Headers("Content-Type:application/json")
@POST(PSDApiconstants.REGISTRATION)
Observable<PSDSignUpResponseBean> registration(@Body PSDRegistrationRequestBean requestBean);
是否有任何方式可以不将请求更改为
{
"imag": "File",
"first_name": "Josmy",
"last_name": "J",
}
修改
目前我认为改造2.0.1在这种模式下不支持图像上传。所以我使用Asynchttp来解决这个问题。但可能是改造2将在7月底的最新版本中包括这个
答案 0 :(得分:3)
在改装2.0中,您可以使用MultipartBody.Part。
上传图像声明您的服务
@Multipart
@POST("/api/imageupload")
Observable<Response> uploadImage(@Part MultipartBody.Part imageFile);
创建您的改装客户端对象并调用您的api。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(YOUR_API_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
//prepare image file
File file = new File(imagePath);
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody.Part imageFileBody = MultipartBody.Part.createFormData("image", file.getName(), requestBody);
YourAPI service = retrofit.create(YourAPI.class);
Call<Response> call = service.uploadImage(imageFileBody);
call.enqueue(new Callback<Response>() {
@Override
public void onResponse(Call<Response> call, Response<Response> response) {
//handle success
}
@Override
public void onFailure(Call<User> call, Throwable t) {
//handle error
}
}