java - Android:retrofit2 和 multipart 的问题
问题描述
当我尝试将文件上传到后端时遇到问题。我要上传的文件是图像。在后端,我有下一个代码来获取它:
@Context private javax.servlet.http.HttpServletRequest hsr;
@PersistenceContext private EntityManager em;
@PostConstruct
private void buildTree() {
String contextName=hsr.getContextPath().substring(1);
System.out.println("contextName: "+contextName);
String folderNames[]={"img"};
FileUtils.generateFolderTree(contextName, folderNames);
}
@Path("/uploadFile")
@POST
@Consumes("multipart/form-data")
public Response uploadFile(MultipartFormDataInput input) {
System.out.println("uploadFile: "+hsr.getRemoteAddr());
Response httpResponse;
if(SecUtils.checkAuthorization(hsr, em, "student")) {
httpResponse=FileUtils.uploadFile(input);//9S: Recoger el fichero recibido como contenido multipart, escribirlo en la ubicación por defecto y crear el httpResponse correspondiente
}
else {
httpResponse=Response.status(401).entity("WRONG CREDENTIALS").build();
}
return httpResponse;
}
正如您所看到的,它消耗类型为 multipart/form-data 的数据,我尝试使用下一个 android java 函数上传它:
API CALL 改造2
@Multipart
@POST("uploadFile")
Call<ResponseBody> uploadSolution(@Part MultipartBody.Part file);
我通过以下方式使用它:
public void uploadSolution(InputStream is, String name) throws IOException {
byte[] data = new byte[is.available()];
is.read(data);
RequestBody file = RequestBody.create(MediaType.parse("application/octet-stream"),data);
MultipartBody.Part part = MultipartBody.Part.createFormData("file", name, file);
Response<ResponseBody> response=api.uploadSolution( part).execute();
Log.d("foto", Integer.toString(response.code()));
}
如您所见,我正在测试获取响应代码的响应,并得到 500 代码。
有人知道我做错了什么吗?
谢谢你的支持!
解决方案
推荐阅读
- r - 按 R 中的模式值删除列
- python - Rasa train_init.py 给出 sklearn_crfsuite pacakge 错误
- node.js - 如何忽略节点请求中的 SSL 证书验证?
- java - 查看通货膨胀始终为空
- php - php双扩展漏洞
- android - 如何在文本小部件中显示特殊字符颤动ç,〜,'
- java - 在 Spring 的存储过程中传递参数
- c++11 - 编译错误 编译 gRPC 时,`'-std=c++11' 对 C++/ObjC++ 有效,但对 C 无效
- android - KOTLIN - 如何将 TextViews 和按钮设置从 Activity 设置为片段
- python - 在 python 中实现 DAG