android - 使用改造将图像上传到服务器
问题描述
我想使用下面的代码使用其 uri 将图像/文件上传到服务器
try {
String descriptionString = "Sample description";
RequestBody description = RequestBody.create(MultipartBody.FORM, descriptionString);
File file = new File(path);
String extension = MimeTypeMap.getFileExtensionFromUrl(uri.toString());
if (extension != null) {
String type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
RequestBody requestFile = RequestBody.create(MediaType.parse(type), file);
MultipartBody.Part body2 = MultipartBody.Part.createFormData("avatar", file.getName(), new FileRequestBody(file, extension));
Response<ResponseBody> response = ApiCaller.getProfileAPI().requestingUploadProfilePhoto("Bearer " + AuthenticationProvider.getInstance().token.token,
"form-data; name=avatar; filename=\"" + file.getName() + "\"",
ProfileProvider.getInstance().parsedProfile.profileId,
description,
body2).execute();
if (response.isSuccessful()){
Logger.msg("Photo", ": uploaded successfully " + uri);
}else{
Logger.msg("Photo", ": uploaded successfully none" + uri + response.errorBody().string());
}
}else{
Logger.msg("Photo", ":extension error");
}
} catch (IOException e) {
e.printStackTrace();
}
我针对该请求的 API 服务
@Multipart
@POST("v1/avatar/profiles/{profileId}/upload")
Call<ResponseBody> requestingUploadProfilePhoto(@Header("Authorization") String authHeader,
@Header("Content-Disposition") String content_type,
@Path("profileId") String profileId,
@Part("description") RequestBody description,
@Part MultipartBody.Part file);
所以,在这里我的回应是不成功的。API 向我返回内部服务器错误状态 500,但我知道服务器运行良好(我测试了其他应用程序)。另外,文件uri也可以。我是新来的,所以有人可以找到我的错误并详细解释错误的原因。
解决方案
如果有人觉得它有用,这里的第一个参数“name”是错误的(在我的情况下,根据服务器,它应该是“file”,而不是“avatar”)
MultipartBody.Part body2 = MultipartBody.Part.createFormData("avatar", file.getName(), new FileRequestBody(file, extension));
Response<ResponseBody> response = ApiCaller.getProfileAPI().requestingUploadProfilePhoto("Bearer " + AuthenticationProvider.getInstance().token.token,
ProfileProvider.getInstance().parsedProfile.profileId,
body2).execute();
if (response.isSuccessful()){
Logger.msg("Photo", ": uploaded successfully " + uri);
}else{
Logger.msg("Photo", ": uploaded successfully none" + uri + response.errorBody().string());
}
所以,改变它并删除所有不必要的东西就足够了。当然,也需要根据参数更改服务文件。我没有足够重视它,因为在教程中它没有作为一些重要参数被提及。
推荐阅读
- node.js - 在 .env 文件中存储私有值是否安全?
- java - 使用递归方法在java中打印文本
- java - facing error while unmarshaling from sml to java
- sql - SQL在同一张表上选择两个相同的列但具有不同的ORDER
- angular - After upgrading to Angular 9, problem with the command "ng lint --fix"
- asp.net-web-api - Web API Clear Button
- python - After Add New model.How to Django Table Migrate without losing data
- shell - `command > output` 和 `command 2>&1 > output` 有什么区别?
- android - How can I prevent closing app when I double-click fast in Android?
- android - How to set floating button visibility to GONE when floating button arrives to the same height position of a TextView inside NestedScrollView?