2013-02-17 2 views
12

@Controller 및 @RequestMapping을 사용하여 spring 3.1.2를 사용하여 여러 파일을 업로드하려고합니다.HTML5 다중 파일 형식 기능을 사용하여 스프링 MVC 다중 파일 업로드

다음은 내가 수행 한 작업과 구성입니다.

의 HTML5 형식 :

<form action="addFileSystemImage.foo" method="post" enctype="multipart/form-data"> 

    <input class='fileInput' type="file" name="files[]" multiple="multiple" /> 

    <input type="text" value="13asdf12eadsf" name="locId"/> 

    <input type="submit" /> 

</form> 

컨트롤러 방법 :

@RequestMapping(value="/publisher/addFileSystemImage.foo", method=RequestMethod.POST) 
public @ResponseBody List<UploadedFile> addFileSystemImage(@RequestParam("files[]") ArrayList<MultipartFile> files, String locId, HttpServletRequest request) { 

//do lotsa voodoo rocket science here to process the files 

} 

내 conf의 :

<mvc:annotation-driven /> 
<context:component-scan base-package="foo.package"></context:component-scan> 
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean> 

addFileSystemImage 방법에 도착 않는 양식을 제출. locId 인수의 데이터는 여기에 있지만 "files"인수는 바인딩되지 않습니다. 체계적으로 null입니다. 어떤 조합의 인수/필드 이름/인수 유형이든 상관 없습니다.

HttpServletRequest 인수는 org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest이며 실제로 파일 데이터를 보유하는 multiPartFile 속성을 보유합니다. 디버그 값을 보면 난 ... 이제 ...

을 내 파일 []가 실제로 여기에 의미

{files[]=[[email protected]6afd7f9, [email protected]28c2811, [email protected]f9aaed7]} 

나에게 준다 ...하지만 어떻게 든 제대로 단계를 데이터 바인딩을 통과하지 못한 요청에서 데이터를 가져올 수 있다고 말해 주겠다고 말하고 싶습니다.하지만이 작업을 올바르게 수행하는 것이 좋습니다 ... Sring way ... :) 그리고 MultipartFile의 ArrayList가 제대로 채워지도록하십시오.

내가 누락 된 항목이 있습니까? 아무도 실제로이 일을 제대로 했습니까? 이 ArrayList (또는 일반 Array)를 채우려면 어떻게해야합니까?

내가이 솔루션을 건너 온 것은 Spring MVC with ajax file upload and MultipartFile이다.하지만이 솔루션이 저에게 효과적이지 않기 때문에 나는 분명히 뭔가 잘못하고있을 것입니다.

참고 : 단일 파일 업로드를 사용할 수 있도록 관리했습니다. 하지만 오늘 당면한 과제는 여러 파일을 한 번에 가져 오는 것입니다.

도움을 주시면 감사하겠습니다.

미리 감사드립니다.

+9

"files"인수를 List 또는 Multipart [] 파일로 선언하려고 했습니까? 스프링지지 목록이 ArrayList이고 스프링이 메소드 인수를 바인드하려고 할 때 캐스트가 실패 할 수도 있다고 생각하지 않습니다. –

+0

나는 과거에 이런 식으로 일할 수 있었다. 나는 당신이 pomm에 commons-fileupload 의존성을 포함시켜야한다는 것을 기억한다. 어쩌면 그것을 시도해도 될까요? – gerrytan

+0

어리석은 저 ...리스트와 배열로 작동했습니다 ... 모든 테스트 중에 내가 한 일을 잊어 버렸을 것입니다 ... 알렉스에게 감사드립니다. 당신은 질문에 대답 할 수 있고 원한다면 당신에게 알려줄 것입니다. 건배! – azpublic

답변

0

commons-fileupload 의존성을 포함 시켰습니까?

<dependency> 
    <groupId>commons-fileupload</groupId> 
    <artifactId>commons-fileupload</artifactId> 
    <version>1.3</version> 
</dependency> 

내가 파일 업로드도 컨트롤러 핸들러 이미 알렉스에 대한 당신의 대답에 감사를받은 적이 있지만

5

의 매개 변수 유형으로 ArrayList를 함께 잘 작동 테스트, 난 그냥 조금 정교하고 싶습니다. 스프링 바인딩을 사용하면 양식 필드가 HTML의 "이름"속성에 바인딩됩니다. 형식 필드가 인 것은 불가능하기 때문에 files [] (해당 구문을 사용하여 변수 이름을 선언하고 그 이름은 파일이지만 선언 유형의 배열입니다.) Spring은이를 일치시킬 수 없습니다 - 이 경우의 동작은 요청의 데이터를 무시하는 것입니다.그런 다음, 액세스 적절한 getter 및 setter와

private List<MultipartFile> files; 
private MultipartFile[] files; 

수 있고, 파일을 변이 : 등의 MultipartFile 같은 형식을 사용

, 당신은 목록라는 이름의 "파일을"또는 다음 예와 같이 배열을 사용할 수 있습니다 그에 따라 목록.