2013-05-24 2 views
1

웹 응용 프로그램에서 Spring MVC를 사용하고 있습니다. 나는 사용자가 파일을 업로드 할 수 있도록 뷰를 가지고 있고, 나는 다음 뷰 사이에이 파일을 보존하려는, 그래서 컨트롤러 액션에 나는 나의 다음 뷰의 모델에 추가 :보기간에 업로드 된 파일 보존

@RequestMapping("/loadFile") 
    public String loadFile(
      Model model, 
      @RequestParam(required = true) CommonsMultipartFile uploadedFile, 
HttpServletRequest request, HttpSession session) 
{ 
//some process 
model.addAttribute("file", uploadedFile); 
} 

을 그래서 내를 다음보기에는 파일 "accesible"이 있어야합니다. 내 파일 업로드보기의 형태를 복제 한 다음이 같은 파일 입력이 파일의 값을 할당하려고 :

을하지만이 [email protected]7836c9d 또는 이와 유사한의 값을 할당하고, 그것이 작동하지 않습니다.

likeso보기간에이 파일을 전파하려면 어떻게해야합니까?

+0

당신이보고있는 것은'toString()'메소드의 값입니다. 두 번째보기에서 입력 필드에서 파일의 경로를 볼 수 있어야합니까? –

+0

첫 번째 양식에서 요청을받는 것 외의 다른 컨트롤러 작업에서이 파일에 대한 액세스 권한을 갖고 싶습니다. – MichelReap

+0

디스크에 저장하고 나중에 요청에 액세스하는 이유는 무엇입니까? –

답변

4

스프링 컨트롤러에서는 HttpSession에 액세스 할 수 있습니다. 이 개체는 사용자 요청간에 정보를 저장하는 데 사용됩니다. getAttribute(String)setAttribute(String, Object) 방법으로이 작업을 수행 할 수 있습니다.

업로드 된 파일을 여러 요청에서 사용할 수있게하려면 CommonsMultipartFile 인터페이스를 통해 해당 개체를 세션에 저장할 수 있습니다. 예를 들면 다음과 같습니다.

HttpSession session = ... // get the session, you have it in your handler method 
CommonsMultipartFile uploadedFile = ...; // same as above 
session.setAttribute("UPLOADED_FILE", uploadedFile); 

이제 세션이 유효해야합니다. 시간이 초과되지 않았거나 무효화되고, 어떤 컨트롤러 또는 서블릿은

CommonsMultipartFile uploadedFile = session.getAttribute("UPLOADED_FILE"); 

봄 당신이 예를 들어 here 볼 수있는 @SessionAttributes이의 주석을 가지고이 개체에 액세스 할 수 있습니다,하지만 난 그것을 좋아하지 않아 .

세션의 속성을 관리하기위한 HttpSessionListener 인터페이스에 관심이있을 수 있습니다.

+0

나는 그 해결책을 생각했지만 내 파일은 꽤 큰 (최대 15MB) 수 있습니다. 이것이 문제가되지 않겠습니까? – MichelReap

+1

@MichelReap'CommonsMultipartFile'은 실제로 바이트를 메모리에 저장하지 않으며, 지속 된 파일에 대한 참조를 가지고있다. (당신이 컨테이너에 디스크에 저장한다.) 필요할 때 바이트를 검색한다. –

+0

나는 그것이 완벽한 해결책 인 것처럼 들린다는 것을 몰랐다. 감사! – MichelReap