如何在Android中使用retrofit 2上传JSON中的多部分图像数据?

时间:2016-06-13 08:57:49

标签: android json retrofit image-uploading retrofit2

我如何将图像文件与我的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月底的最新版本中包括这个

1 个答案:

答案 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
    }
}