【发布时间】:2017-01-14 19:46:40
【问题描述】:
我正在尝试使用retrofit2 beta 3 在服务器上上传图片。在响应中我得到了成功,但图片没有上传到服务器上。我不知道我在哪里犯错。 和
标题类型为 Content-Type: application/x-www-form-urlencoded
我的界面
@Multipart
@POST("/uploadFile")
Call<ResponseBody> upload(@PartMap Map<String, RequestBody> params);
我上传的方法是
上传图片和数据的方法
private void uploadFile() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
ApiInterface service =
retrofit.create(ApiInterface.class);
File file = new File(fileUri.getPath());
Log.e(TAG, "uploadFile: " + file.toString());
String fileName = "uploadFile\"; filename=\"" + file.getName();
final RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
final RequestBody empsno = RequestBody.create(MediaType.parse("text/plain"), strEmpsno);
final RequestBody storsno = RequestBody.create(MediaType.parse("text/plain"), strStoreSno);
final RequestBody strlr = RequestBody.create(MediaType.parse("text/plain"), strLrno);
final RequestBody strtecq = RequestBody.create(MediaType.parse("text/plain"), strRecqty);
final RequestBody strtecv = RequestBody.create(MediaType.parse("text/plain"), strRecvol);
final RequestBody strtecw = RequestBody.create(MediaType.parse("text/plain"), strRecwgt);
final RequestBody strdmg = RequestBody.create(MediaType.parse("text/plain"), strDamageqty);
final RequestBody strlus = RequestBody.create(MediaType.parse("text/plain"), strLooseqty);
final RequestBody strdd = RequestBody.create(MediaType.parse("text/plain"), strDeliverydate);
final RequestBody strdt = RequestBody.create(MediaType.parse("text/plain"), strDeliverytime);
final RequestBody strrem = RequestBody.create(MediaType.parse("text/plain"), strRemarks);
final RequestBody strrec = RequestBody.create(MediaType.parse("text/plain"), strReceivedby);
final RequestBody strip = RequestBody.create(MediaType.parse("text/plain"), strIpaddress);
Map<String, RequestBody> oJSONObject = new HashMap<>();
oJSONObject.put("empsno", empsno);
oJSONObject.put("storesno", storsno);
oJSONObject.put("lrSno", strlr);
oJSONObject.put("recQty", strtecq);
oJSONObject.put("recVol", strtecv);
oJSONObject.put("recWgt", strtecw);
oJSONObject.put("damageQty", strdmg);
oJSONObject.put("looseQty", strlus);
oJSONObject.put("deliveryDate", strdd);
oJSONObject.put("deliveryTime", strdt);
oJSONObject.put("remarks", strrem);
oJSONObject.put("receivedBy", strrec);
oJSONObject.put("ipAddress", strip);
Call<ResponseBody> call = service.upload(oJSONObject);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
Log.e(TAG, "onResponse: " + response.isSuccessful());
if (response.isSuccessful()) {
Log.e(TAG, "onResponse: " + response.body());
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.e(TAG, "onFailure: " + t.getLocalizedMessage());
}
});
}
响应 response.isSuccessful()=true。我的回复成功了,那么我的问题在哪里。请帮助我找到解决方案。
我也尝试过其他方式但没有成功,其他方式也有同样的结果
@Multipart
@POST("/uploadFile")
Call<Response> getDetails(@Part("empsno") RequestBody empsno,
@Part("storesno")RequestBody storesno,
@Part("lrSno")RequestBody lrSno,
@Part("recQty")RequestBody recQty,
@Part("recVol")RequestBody recVol,
@Part("recWgt")RequestBody recWgt,
@Part("damageQty")RequestBody damageQty,
@Part("looseQty")RequestBody looseQty,
@Part("deliveryDate")RequestBody deliveryDate,
@Part("deliveryTime")RequestBody deliveryTime,
@Part("uploadFile\"; filename=\"abc.jpg\" ") RequestBody part,
@Part("remarks")RequestBody remarks,
@Part("receivedBy")RequestBody receivedBy,
@Part("ipAddress") RequestBody ipAddress
我在这里使用的方法是
File file = new File(fileUri.getPath());
RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody.Part body = MultipartBody.Part.createFormData("uploadFile", file.getName(), requestFile);
RequestBody empsno = RequestBody.create(MediaType.parse("text/plain"), strEmpsno);
RequestBody storsno = RequestBody.create(MediaType.parse("text/plain"), strStoreSno);
RequestBody strlr = RequestBody.create(MediaType.parse("text/plain"), strLrno);
RequestBody strtecq = RequestBody.create(MediaType.parse("text/plain"), strRecqty);
RequestBody strtecv = RequestBody.create(MediaType.parse("text/plain"), strRecvol);
RequestBody strtecw = RequestBody.create(MediaType.parse("text/plain"), strRecwgt);
RequestBody strdmg = RequestBody.create(MediaType.parse("text/plain"), strDamageqty);
RequestBody strlus = RequestBody.create(MediaType.parse("text/plain"), strLooseqty);
RequestBody strdd = RequestBody.create(MediaType.parse("text/plain"), strDeliverydate);
RequestBody strdt = RequestBody.create(MediaType.parse("text/plain"), strDeliverytime);
RequestBody strrem = RequestBody.create(MediaType.parse("text/plain"), strRemarks);
RequestBody strrec = RequestBody.create(MediaType.parse("text/plain"), strReceivedby);
RequestBody strip = RequestBody.create(MediaType.parse("text/plain"), strIpaddress);
ApixInterface xInterface = retrofit.create(AudexInterface.class);
Call<Response> podResponsecall = xInterface.getDetails(empsno, storsno, strlr, strtecq,
strtecv, strtecw, strdmg, strlus, strdd, strdt,
requestFile, strrem, strrec, strip);
podResponsecall.enqueue(new Callback<Response>() {
@Override
public void onResponse(Call<Response> call, Response<Response> response) {
Log.e(TAG, "onResponse: " + response.isSuccessful());
if (response.isSuccessful()) {
Toast.makeText(getApplicationContext(), "Successfully saved!!!", Toast.LENGTH_LONG);
Log.e(TAG, "onResponse: " + response.body().getResult());
uploadFile();
}
}
@Override
public void onFailure(Call<Response> call, Throwable t) {
Log.e(TAG, "onFailure: " + t.getLocalizedMessage());
}
});
通过使用此方法,响应也成功,但图像未上传到服务器。
提前致谢
【问题讨论】:
标签: android retrofit multipartform-data retrofit2