java - JAVA - SPRING - 请求被拒绝,因为没有找到多部分边界
问题描述
请在回答后阅读。
我有一个项目,它分为两个模块,一个用于“SERVICE”,一个用于“WEB”
Service 模块像 REST 服务器一样工作,WEB 模块像 REST 客户端一样工作,从 Service 模块使用 Web 服务,并且像 REST 服务器一样工作到 Angular APP
当我使用 Postman 附加 CSV 文件直接向服务模块发出请求时,就像一个魅力,但是当我尝试对 WEB 模块执行相同的操作时,它会得到 500 状态代码,并且服务模块会得到以下跟踪:
服务模块
2018/oct/12 23:31:55.922 [http-nio-4501-exec-7] ERROR [dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found] with root cause
org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:831)
at org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:256)
at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:280)
at org.apache.catalina.connector.Request.parseParts(Request.java:2884)
at org.apache.catalina.connector.Request.parseParameters(Request.java:3232)
at org.apache.catalina.connector.Request.getParameter(Request.java:1137)
at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:381)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:75)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
服务模块控制器
@Autowired
UtilitarioServicio utilitarioServicio;
@RequestMapping(path = "/uploadFile", method = RequestMethod.POST,
consumes = "multipart/form-data")
public String getUploadedFile(
@RequestParam("file") MultipartFile file,
@RequestParam("procesoId") Integer procesoId,
@RequestParam("fuenteId") Integer fuenteId) throws IOException {
utilitarioServicio.getUploadedFile(file, fuenteId, procesoId);
return "";
}
网络模块控制器
@Autowired
UtilitarioServicioProxy restProxy;
@RequestMapping(path = "/uploadFile", method = RequestMethod.POST)
public String getUploadedFile(
@RequestParam("file") MultipartFile file,
@RequestParam("fuenteId") Integer fuenteId,
@RequestParam("procesoId") Integer procesoId) throws IOException {
restProxy.getUploadedFile(file, fuenteId, procesoId);
return "";
}
提前致谢。
解决方案
我解决了从 Multipart 文件获取字节的问题,然后转换为 base64Encoded,并将类似字符串参数发送到服务,然后将 base64Encoded 转换为字节,然后再转换为文件。
网络
@Override
public String getUploadedFile(MultipartFile file, Integer fuenteId, Integer procesoId) {
try {
byte[] fileBytes = file.getBytes();
String base64Encoded = DatatypeConverter.printBase64Binary(fileBytes);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
map.add("file", base64Encoded);
map.add("procesoId", procesoId.toString());
map.add("fuenteId", fuenteId.toString());
HttpEntity<MultiValueMap<String, String>> requestEntity
= new HttpEntity<MultiValueMap<String, String>>(map, headers);
getRestTemplate().postForObject(url + "/uploadFile", requestEntity, String.class);
} catch (IOException ex) {
Logger.getLogger(UtilitarioServicioProxyImpl.class.getName()).log(Level.SEVERE, null, ex);
}
return "";
}
服务
@RequestMapping(path = "/uploadFile", method = RequestMethod.POST,
consumes = "application/*")
public String getUploadedFile(@RequestParam("file") String file,
@RequestParam("procesoId") Integer procesoId, @RequestParam("fuenteId") Integer fuenteId) throws IOException {
byte[] fileDecoded = DatatypeConverter.parseBase64Binary(file);
utilitarioServicio.getUploadedFile(fileDecoded, fuenteId, procesoId);
return "";
}
推荐阅读
- python - 如何实现更改文件名读取的迭代方式以及如何将结果合并到单个excel文件中
- c - addr2line 如何使用虚拟地址进行内核空间调试?
- python - 绘制二维求和函数时的问题
- javascript - 如何根据他们在提交表单后所做的选择将用户引导到特定页面?
- linux - 在 Makefile 的 ifeq 块内编写食谱
- javascript - innerHTML 在我的反应应用程序中只工作一次
- python - NameError:名称“boto3”未定义
- amazon-web-services - 如何在 DynamoDB 表中禁用自动缩放?
- python - 使用 PIL 在文本周围创建一个填充的矩形/形状
- javascript - 状态更新时反应钩子重新渲染错误