如何使用 retrofit2 multipart 上传图片?

How to upload Image using retrofit2 multipart?

我完全掌握了在服务器上上传图像的结构。我成功地从服务器获得响应,但图像没有在服务器上上传。总是要求 "Insert Your Image"。

这是我的代码请检查这里,我哪里出错了

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
);

提前谢谢大家

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