【发布时间】:2018-06-01 20:55:52
【问题描述】:
我正在尝试使用 ng-file-upload 从 Angular 4 应用程序向 Spring Boot 应用程序发送文件,但抛出异常当前请求不是多部分请求 这是例外
org.springframework.web.util.NestedServletException: 请求 处理失败;嵌套异常是 org.springframework.web.multipart.MultipartException:当前请求 不是多部分请求 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) 在 org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 在 io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) 在 io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129) 在 com.rs.unified.gateway.security.jwt.JWTFilter.doFilter(JWTFilter.java:50) 在 io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) 在 io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) 在 org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) 在 io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) 在 org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) 在 org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
upload(item: FileItem ) {
const copy: File = item._file;
const fd = new FormData();
fd.append('file', copy);
this.serviceData.uploadFile(fd).subscribe((res: Response) => {
this.activeModal.close();
},
);
}
/// 服务代码
uploadFile(file): Observable<any> {
const headers = new Headers({ 'Content-Type': 'multipart/form-data' });
const options = new RequestOptions({ headers: headers });
return this.http.post(this.resourceUrl, file,
options );
}
///java代码
@PostMapping(value = "/upload", consumes = { "multipart/form-data", MediaType.APPLICATION_JSON_VALUE }) // 4.3
public ResponseEntity<Object> singleFileSend(HttpServletRequest request,@RequestPart MultipartFile file,
RedirectAttributes redirectAttributes) {
log.info("The received file" + file.getName());
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(null, SecurityUtils.resolveToken(request));
RestTemplate restTemplate = new RestTemplate();
HttpEntity<Object> entity = new HttpEntity<>(file,headers);
ResponseEntity<Object> responseEntity = restTemplate.exchange(urlCoverage+"/coverage/uploadCoverage/", HttpMethod.POST, entity, Object.class);
return new ResponseEntity<>(responseEntity.getBody(), null, HttpStatus.OK);
}
【问题讨论】:
-
试试这个
const headers = new Headers(); -
我试了一下,还是不行
-
尝试
const headers = new Headers();和后端删除consumes = { "multipart/form-data", MediaType.APPLICATION_JSON_VALUE } -
同样的事情它不起作用:(!!
-
你能发布你更新的代码吗?
标签: angular spring-boot