java - 如何使用 retrofit2 上传图像文件?
问题描述
我正在尝试使用 Retrofit2 将图像从 android 设备上传到服务器并最终收到错误“400 Bad Request”。下面是实现。有人可以帮助解决错误吗?
服务 :
@Multipart
@Headers("Content-type:application/json")
@POST("upload/profile")
Call<JsonObject> changePhotoProfile(@Part MultipartBody.Part partFile);
这是我的代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == 100) {
if (data != null) {
Uri uri = data.getData();
uploadImageToServer(uri);
}
}
}
private void uploadImageToServer(Uri uri) {
MultipartBody.Part partMap = prepareFilePart("file", uri);
Call<JsonObject> changeImage = baseServiceAPI.changePhotoProfile(partMap);
changeImage.enqueue(new Callback<JsonObject>() {
@Override
public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
}
@Override
public void onFailure(Call<JsonObject> call, Throwable t) {
}
});
}
private MultipartBody.Part prepareFilePart(String partName, Uri uri) {
File file = FileUtils.getFile(ProfileActivity.this, uri);
RequestBody requestBody = RequestBody.create(MediaType.parse(Objects.requireNonNull(getContentResolver().getType(uri))), file);
return MultipartBody.Part.createFormData(partName, file.getName(), requestBody);
}
解决方案
你可以试试没有@Headers("Content-type:application/json")
喜欢
@Multipart
@POST("upload/profile")
Call<JsonObject> changePhotoProfile(@Part MultipartBody.Part partFile);
它应该工作
推荐阅读
- javascript - 如何仅使用其名称而不知道其文件扩展名来定位文件系统中的文件
- django - NOT NULL 约束失败:products_order.user_id 尝试保存序列化程序 django 休息框架工作时
- flutter - Firebase 身份验证不适用于共享首选项
- xamarin - Xamarin BindableProperty 值优先级
- r - R如何按条件加入data.table?
- html - 在 ng-circle-progress 的外部笔划中添加自定义 css
- netsuite - 在 NetSuite 中,如何在转移订单上显示现有、可用和优先股级别?
- unicode - 字符是由像素组成的吗?
- bash - 指向两个不同位置的 Azure 管道工作目录
- c# - 如何保护 Razor 类库中的控制器