如何使用retrofit2 multipart上传图像?

问题描述:

我完全得到了在服务器上传图片的结构。我成功地从服务器获得响应,但图像无法在服务器上获取。始终要求“插入图像”。如何使用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);我越来越

/存储/模拟/ 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 
); 

谢谢大家提前

+0

'我成功获得来自服务器的响应'。你在哪里以及如何得到这样的答复? – greenapps

+0

'response.body()。getResult())'。租赁告诉你到达那里。 – greenapps

+0

'response.body()。getResult())'这里我得到服务器的响应 –

后很长很长的时间我得到了我的答案。谢谢所有为我尝试过的人。唯一的错误是我把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'