POST图像使用Retrofit 2.0

时间:2017-01-31 17:32:28

标签: android post retrofit2

我尝试上传带有下一个要求的POST请求的图片:

参数名称:imageFile
参数类型:文件
要上传的文件。它必须作为multipart部分包含在请求的主体中,其中value = image和type = image /*.

这是请求定义:

    @Multipart
    @POST("sample/uploadImage")
    Call<ImageResponse> UploadImage(@Part MultipartBody.Part file);

这是代码:

  RequestBody fbodyRequest = RequestBody.create(MediaType.parse("image/*"), destination);

[...]

RetrofitInterface apiService =
                retrofit.create(RetrofitInterface.class);
        Call<ImageResponse> call = apiService.UploadImage(fbodyRequest);
        call.enqueue(new Callback<ImageResponse>() {...

提前致谢。

1 个答案:

答案 0 :(得分:0)

  

您可以尝试使用以下代码上传文件类型的图片。

Retrofit Interface class:

public interface RetrofitInterface {
  @Multipart
    @POST("v1/photo/{deviceid}/")
    public Call<PhotoModel> photoValues(@Path("deviceid") String deviceid, @Query("key") String key, @Part MultipartBody.Part filePart)

    final OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .readTimeout(50000, TimeUnit.SECONDS)
            .connectTimeout(50000, TimeUnit.SECONDS)
            .build();

    public static final Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(AppConstants.mBaseUrl)
            .addConverterFactory(GsonConverterFactory.create())
            .client(okHttpClient)
            .build();
}
  

首先获取图像文件并转换为FilePart类型然后我们才能   通过改造api发送。它会正常工作。

主类:

RetrofitInterface service = RetrofitInterface.retrofit.create(RetrofitInterface.class);
        Call<PhotoModel> call = service.photoValues(deviceid, AppConstants.mApiKey, filePart);
        call.enqueue(new Callback<PhotoModel>() {
            @Override
            public void onResponse(Call<PhotoModel> call, Response<PhotoModel> response) {
                .....
            }

            @Override
            public void onFailure(Call<PhotoModel> call, Throwable t) {
                .....
            }
        });