[SPRING] 아약스 파일 업로드 및 MultipartFile이있는 Spring MVC
SPRING아약스 파일 업로드 및 MultipartFile이있는 Spring MVC
스프링 3 MVC로 Ajax 업로드를 사용하는 데 문제가 있습니다. Spring config에서 multipartResolver 빈을 구성해야한다는 것을 이해합니다. 내가 컨트롤러를 가질 수있는 것보다
@RequestMapping(value ="/settingsSim")
@ResponseBody
public Map uploadSimSettings(@RequestParam(value="qqfile", required=true) MultipartFile settings) {
Map<String, Object> ret = new HashMap<String, Object>();
return ret;
}
문제는 내가 실제로 서버에 요청을 보낼 때 (실제로 valum Ajax 파일 업로드가 나를 위해이 작업을 수행함) 내부 서버 오류 응답이 나타나고 로그에 아무것도 표시되지 않는다는 것입니다. 문제를 파악할 수 없기 때문에 지금 당장 머리를 긁적입니다.
해결법
-
==============================
1.valums 플러그인을 사용할 때 @RequestBody Spring annotation을 사용하여이 문제를 해결했습니다. 다음과 같이 코드를 다시 작성할 수 있습니다.
valums 플러그인을 사용할 때 @RequestBody Spring annotation을 사용하여이 문제를 해결했습니다. 다음과 같이 코드를 다시 작성할 수 있습니다.
@RequestMapping(value ="/settingsSim",method=RequestMethod.POST) @ResponseBody public Map uploadSimSettings(@RequestBody String body) { /* some controller logic */ }
변수 본문에는 업로드 된 파일의 내용이 포함됩니다. 또한 메서드에 메서드 선언이 없으므로 메서드가 GET 요청에 매핑됩니다.
추신 Apache Commons와의 요청을 파싱 할 때도 "다중 부분 경계 없음"문제가 발생했습니다. HttpServletRequest # getParts ()는 빈 콜렉션을 반환합니다.
-
==============================
2.내 솔루션 :
내 솔루션 :
@RequestMapping(value = "/create/upload", method = RequestMethod.POST, consumes="multipart/form-data", produces="application/json") @ResponseBody() public String handleImageUpload(@RequestParam(value="qqfile", required=true) MultipartFile[] files, @ModelAttribute(value="files") List<MultipartFile> filesSession) throws IOException, FileUploadException { if (files.length > 0) { filesSession.addAll(Arrays.asList(files)); // store the bytes somewhere return "{\"success\": true}"; } else { return "{\"success\": false}"; } } @RequestMapping(value = "/create/upload", method = RequestMethod.POST, consumes="application/octet-stream", produces="application/json") @ResponseBody() public String handleImageUploadApplication(HttpServletRequest request, @ModelAttribute(value="files") List<MultipartFile> filesSession) throws IOException, FileUploadException { if (request.getInputStream() != null) { // creamos el fichero temporal File file = File.createTempFile("file", "valumns", RepositoryData.getRepositoryData()); FileOutputStream fos = new FileOutputStream(file); // copiamos contenido Streams.copy(request.getInputStream(), fos, true); //TODO: //filesSession.addAll(Arrays.asList(files)); // store the bytes somewhere return "{\"success\": true}"; } else { return "{\"success\": true}"; } } @ExceptionHandler(Exception.class) @ResponseStatus(value = HttpStatus.SERVICE_UNAVAILABLE) public void handleException(Exception ex) { log.error("Ocurrio un error en el album", ex); }
-
==============================
3.나는 fineuploader (valums)와 같은 문제가 있었고, request.getInputStream ()을 사용해 보았지만 작동시키지 못했습니다.
나는 fineuploader (valums)와 같은 문제가 있었고, request.getInputStream ()을 사용해 보았지만 작동시키지 못했습니다.
@ResponseBody 주석은 작동했지만 헤더가있는 전신이 있습니다. 나는 그것을 처리하고 원치 않는 덩어리를 제거하는 것이 매우 우아하지 않다고 생각했습니다. 나는 더 멀리 보았고 그 해결책이이 포스트라는 것을 알았다 :
봄 아약스 파일 업로드 문제
그것이 말했듯이, 다중 구성 분석기에 대한 빈 구성을 스프링 구성에 추가했습니다.
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> </bean>
그 후, 나는 쉽게 내 파일을 검색 할 수 있었다.
public @ResponseBody Map ajaxUploadFile(@RequestParam MultipartFile qqfile) { ... }
프로젝트에 아파치 commons-io.jar 및 commons-fileupload.jar 라이브러리를 추가하여 작동하게하십시오.
-
==============================
4.@ 토마스 동일한 jquery 플러그인을 사용하는 동안 동일한 문제가 발생했습니다. 플러그인 코드의 Content-Type을 xhr.setRequestHeader ( "Content-Type", "multipart / form-data")로 변경하십시오. 내 플러그인 1203,이 후 지금은 스택 추적을 보여 주지만 로그가 인쇄되고있는 또 다른 문제가 발생했습니다. 2011 년 9 월 8 일 9:43:39 org.apache.catalina.core.StandardWrapperValve invoke 심각 : 서블릿 디스패처 용 Servlet.service ()가 예외를 던졌습니다. org.apache.commons.fileupload.FileUploadException : 다중 부분 경계가 발견되지 않아 요청이 거부되었습니다.
@ 토마스 동일한 jquery 플러그인을 사용하는 동안 동일한 문제가 발생했습니다. 플러그인 코드의 Content-Type을 xhr.setRequestHeader ( "Content-Type", "multipart / form-data")로 변경하십시오. 내 플러그인 1203,이 후 지금은 스택 추적을 보여 주지만 로그가 인쇄되고있는 또 다른 문제가 발생했습니다. 2011 년 9 월 8 일 9:43:39 org.apache.catalina.core.StandardWrapperValve invoke 심각 : 서블릿 디스패처 용 Servlet.service ()가 예외를 던졌습니다. org.apache.commons.fileupload.FileUploadException : 다중 부분 경계가 발견되지 않아 요청이 거부되었습니다.
-
==============================
5.내 관찰에 따르면 파일 업로드 플러그인은 멀티 파트 파일을 보내지 않고 스트림을 보냅니다. 제어기 메소드가 filename을 요청 param qqfile로, 두 번째 매개 변수를 httprequest로 받아들임으로써 작동하도록 할 수 있습니다. 그런 다음 request.getinputstream을 사용하여 추가 처리를 수행했습니다. 희망이 도움이됩니다!
내 관찰에 따르면 파일 업로드 플러그인은 멀티 파트 파일을 보내지 않고 스트림을 보냅니다. 제어기 메소드가 filename을 요청 param qqfile로, 두 번째 매개 변수를 httprequest로 받아들임으로써 작동하도록 할 수 있습니다. 그런 다음 request.getinputstream을 사용하여 추가 처리를 수행했습니다. 희망이 도움이됩니다!
문안 인사,
프라 디마
from https://stackoverflow.com/questions/7246041/spring-mvc-with-ajax-file-upload-and-multipartfile by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Accept 헤더가 * / * 일 때 @ResponseBody가있는 Spring 반환 json은 HttpMediaTypeNotAcceptableException을 throw합니다. (0) | 2019.04.13 |
---|---|
[SPRING] Spring이있는 EJB3 (0) | 2019.04.13 |
[SPRING] Spring 3 MVC 요청 유효성 검사 (0) | 2019.04.13 |
[SPRING] Spring 애플리케이션과 JMX를 통합 할 수 없다. (0) | 2019.04.13 |
[SPRING] Spring 부팅시 각 DB 연결 시작시 SQL 문 실행 (0) | 2019.04.13 |