如何使用retrofit2 multipart上传图片?

时间:2016-09-29 08:20:04

标签: android image retrofit2 multipart

我在服务器上传图像时完全得到了结构。我从服务器成功获得响应,但图像未在服务器上上传。总是要求"插入您的图像"。

这是我的代码请检查一下,我犯了错误

private void uploadFile(Uri fileUri) {
    File file = new File(fileUri.getPath());
    if (file.exists()) {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(ScalarsConverterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        Log.e(TAG, "uploadFile:File "+file );
        MediaType MEDIA_TYPE_PNG = MediaType.parse("multipart/form-data");

        APIInterface service = retrofit.create(APIInterface.class);

        RequestBody requestFile = RequestBody.create(MEDIA_TYPE_PNG, file);
        Log.e(TAG, "uploadUri: " + strEmpsno + " " + strStoreSno + "  " + strLrno + "  " + strRecqty + "  " + strDeliverydate + " " + strDeliverytime);
        Call<PODResponse> call = service.postFile(strEmpsno, strStoreSno, strLrno, strRecqty, strRecvol,
                strRecwgt, strDamageqty, strLooseqty, strDeliverydate
                , strDeliverytime, requestFile, strRemarks, strReceivedby,
                strIpaddress);

        call.enqueue(new Callback<PODResponse>() {
            @Override
            public void onResponse(Response<PODResponse> response) {
                Log.e(TAG, "onResponse:uploadUri " + response.isSuccess());
                if (response.isSuccess()) {
                    Log.e(TAG, "uploadUri: " + response.body().getResult());
                }
            }

            @Override
            public void onFailure(Throwable t) {
                Log.e(TAG, "onFailure:uploadUri " + t.getLocalizedMessage());
            }
        });
    }
  }

记录Log.e(TAG, "uploadFile:File "+file );我正在

  

/storage/emulated/0/Audex/saved_images/logo.jpg

这是我的Image name with path。从Rest(chrome extension)图像成功存储在服务器上,但不是使用此代码。请帮帮我。

我的界面就像

  @Multipart
@POST("/savePic")
Call<PODResponse> postFile(
        @Part("empsno") String empsno,
        @Part("storesno") String storesno,
        @Part("lrSno") String lrSno,
        @Part("recQty") String recQty,
        @Part("recVol") String recVol,
        @Part("recWgt") String recWgt,
        @Part("damageQty") String damageQty,
        @Part("looseQty") String looseQty,
        @Part("deliveryDate") String deliveryDate,
        @Part("deliveryTime") String deliveryTime,
        @Part("uploadFile\"; filename=\"audex.jpg\" ") RequestBody part,
        @Part("remarks") String remarks,
        @Part("receivedBy") String receivedBy,
        @Part("ipAddress") String ipAddress
);

提前全部谢谢

1 个答案:

答案 0 :(得分:0)

很长一段时间后,我得到了答案。谢谢所有为我而努力的人。只有错误是我把RequestBody而不是String。

  @Multipart
  @POST("/savePic")
  Call<PODResponse> postFile(
    @Part("empsno") String empsno,
    @Part("storesno") String storesno,
    @Part("lrSno") String lrSno,
    @Part("recQty") String recQty,
    @Part("recVol") String recVol,
    @Part("recWgt") String recWgt,
    @Part("damageQty") String damageQty,
    @Part("looseQty") String looseQty,
    @Part("deliveryDate") String deliveryDate,
    @Part("deliveryTime") String deliveryTime,
    @Part("uploadFile\"; filename=\"audex.jpg\" ") String part, // Change here
    @Part("remarks") String remarks,
    @Part("receivedBy") String receivedBy,
    @Part("ipAddress") String ipAddress
    @Part MultipartBody.Part images
);

@Part("uploadFile\"; filename=\"audex.jpg\" ") String part我只是将RequestBody更改为字符串,最后添加了@Part MultipartBody.Part images

**我使用的依赖是

compile 'com.squareup.retrofit2:retrofit-converters:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-scalars:2.0.2'