使用Retrofit2将图像上载到服务器POST请求
我想使用Retrofit2将我的图库图像上传到服务器。 API有1个参数,其中包含flie作为表单数据&另一个参数是带有键的标题。当我将图像上传到服务器时,我从服务器收到“找不到文件”消息。我正在发送正确的文件名,但我不知道它为什么给出这样的答案。任何人都可以帮助我解决问题。以下是我的代码。使用Retrofit2将图像上载到服务器POST请求
final ProgressDialog progressDialog;
progressDialog = new ProgressDialog(UserProfileActivity.this);
progressDialog.setMessage("Updating Data");
progressDialog.show();
//Create Upload Server Client
ApiService service = RetroClient.getApiService();
//File creating from selected URL
File file = new File(imgDecodableString);
Log.d("TAG","file="+file.getName());
// create RequestBody instance from file
RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
// MultipartBody.Part is used to send also the actual file name
MultipartBody.Part body =
MultipartBody.Part.createFormData("image", file.getName(), requestFile);
Call<com.example.datamodel.Response> resultCall = service.uploadImage(loginHash,body);
resultCall.enqueue(new Callback<com.example.datamodel.Response>() {
@Override
public void onResponse(Call<com.example.datamodel.Response> call, retrofit2.Response<com.example.datamodel.Response> response) {
com.example.datamodel.Response mBean = response.body();
if(null != mBean)
{
Log.d("TAG","RS="+mBean.getMessage());
Log.d("TAG","RS="+mBean.getData().getvImage());
}
progressDialog.dismiss();
}
@Override
public void onFailure(Call<com.example.datamodel.Response> call, Throwable t) {
progressDialog.dismiss();
Log.d("TAG", "fail=" + t.getMessage());
}
});
RetroClient.java
public class RetroClient {
public RetroClient() {
}
private static Retrofit getRetroClient() {
return new Retrofit.Builder()
.baseUrl(AppConstants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
public static ApiService getApiService() {
return getRetroClient().create(ApiService.class);
}}
ApiService.java
public interface ApiService {
@Multipart
@POST("api/User/uploadUserProfilePhoto")
Call<Response> uploadImage(@Header("vLoginHash") String vLoginHash,@Part MultipartBody.Part file);}
在logcat的我越来越找不到文件从服务器消息。任何人都请帮忙。提前致谢。
没有多
@POST("/api/name.jpg")
Call<Object> upload(
@Header("header_name") String authorization,
@Body RequestBody body);
尝试OnActivityREsult
if (resultCode == Activity.RESULT_OK) {
Bitmap photo = null;
if(requestCode==REQUEST_GALLERY){
try {
photo = MediaStore.Images.Media.getBitmap(getActivity().getApplicationContext().getContentResolver(), data.getData());
} catch (IOException e) {
e.printStackTrace();
}
}
// CALL THIS METHOD TO GET THE URI FROM THE BITMAP
if(photo!=null){
Uri tempUri = getImageUri(getActivity(), photo);
// CALL THIS METHOD TO GET THE ACTUAL PATH
File finalFile = new File(getRealPathFromURI(tempUri));
RequestBody requestBody = RequestBody.create(MediaType.parse("*/*"), file);
apimy.upload(header value,requestBody).enque...
}
}
public Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}
public String getRealPathFromURI(Uri uri) {
Cursor cursor = getActivity().getContentResolver().query(uri, null, null, null, null);
assert cursor != null;
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
return cursor.getString(idx);
}
此代码工作正常,我。
Getting Body参数不能与格式或多部分编码一起使用。 –
删除@Multipart在你的界面上面的帖子行 –
我已经删除它,但结果相同。 –
使用这可能是它的帮助http://stackoverflow.com/a/40608320/5305430 – sushildlh
@sushildlh我已经做到了这一点,也改变了MediaType.parse(“image/*”),但仍然是相同的错误 –