android - 上传图像时改造响应二进制文件
问题描述
我正在尝试使用 retrofit2 从相机或画廊上传图像它运行完美,直到 enqueue() 方法,但之后它返回一个 400 错误的 requeat 响应:像这样:D/OkHttp:������JFIF�� ��������������C�� ....
API调用:
@Multipart
@POST("feed/")
Call<ResponseBody> postFeedItem(@Part("location") RequestBody location,
@Part MultipartBody.Part m_Url);
Fragment中的上传方法:
private void sharePost(){
File file = new File(globalPost);
RequestBody filePart = RequestBody.create(MediaType.parse("image/*"),file);
MultipartBody.Part body = MultipartBody.Part.createFormData("m_Url",file.getName(),filePart);
Timber.i(file.toString());
String loc = location.getText().toString();
RequestBody loc_req = RequestBody.create(MultipartBody.FORM,loc);
if(loc !=null && file != null){
Call<ResponseBody> call = ApiClient.getApiClient().create(UserClient.class).postFeedItem(loc_req,body);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
Toast.makeText(getContext(),response.code(),Toast.LENGTH_LONG).show();
Timber.i(String.valueOf(response.code()));
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Timber.e(t.getMessage()+"onFailure()");
}
});
}
}
画廊或相机的结果:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == REQUEST_CAMERA) {
//Bundle bundle = data.getExtras();
// final Bitmap bmp = (Bitmap) data.getExtras().get("data");
//imageView.setImageBitmap(bmp);
Glide.with(this).load(imageFilePath).into(imageView);
//imageBitmap = bmp;
globalPost = imageFilePath;
share.setVisibility(View.VISIBLE);
} else if (requestCode == REQUEST_GALLERY) {
Uri selectedImageUri = data.getData();
imageView.setImageURI(selectedImageUri);
try {
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getActivity().getContentResolver().query(selectedImageUri,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
globalPost = picturePath;
cursor.close();
share.setVisibility(View.VISIBLE);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
private String imageToString(Bitmap imageBitmap) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
imageBitmap.compress(Bitmap.CompressFormat.JPEG,100,byteArrayOutputStream);
byte[] imgByte = byteArrayOutputStream.toByteArray();
return Base64.encodeToString(imgByte,Base64.DEFAULT);
}
解决方案
推荐阅读
- docker - 如何使用 Certbot 为 xampp docker 安装 ssl 证书?
- python - 如何将 matplotlib fill_between 用于默认 ylim
- google-apps-script - 随机异常 - Google Apps 脚本中的“服务超时:电子表格”
- node.js - mongodb 子文档是否等同于 Firestore 子集合?
- reactjs - 在图表中反应径向渐变填充
- javascript - 对象及其字段的奇怪 console.log 行为
- java - Sort custom objects by String and alphanumeric
- reactjs - 如何避免在 React 上重新实例化从 Redux 返回的类实例
- android - 如何在 Android 中的 LinearProgressBar 中添加渐变颜色和圆角指示器?
- mongodb - MongoDb 模式设计用于基于角色的访问