如何使用 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'
我完全掌握了在服务器上上传图像的结构。我成功地从服务器获得响应,但图像没有在服务器上上传。总是要求 "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'