2010-01-14 2 views
12

업로드 된 멀티 파트 파일을 파일 시스템에 쓰려고합니다. 나는 내 웹 응용 프로그램의 루트에 앉아있는 audio라는 디렉토리를 가지고 있습니다 (WEB-INF 안이 아니라 옆에 CSS와 javascript처럼 공개적으로 액세스 할 수 있음).스프링 컨트롤러에서 웹 응용 프로그램 루트 가져 오기

내가 업로드 한 파일을 해당 디렉토리에 쓰고 싶지만 필요한 경로를 얻을 수없는 것 같습니다. 나는 ServletContext()를 얻고 realPath()를 사용하는 것이 효과적일지도 모른다고 생각했지만 Spring 컨트롤러를 통해 ServletContext에 대한 참조를 가지고 있지 않습니다. 어떤 형 간염

@RequestMapping(value="/uploadSample") 
public ModelAndView upload(HttpServletRequest request, HttpServletResponse response, @RequestParam("file") MultipartFile f) { 

    if (f == null) { 
     return new ModelAndView("upload", "msg", "The file is null."); 
    } 
    try { 
     // I need to set AUDIO_PATH to <webAppRoot>/audio 
     FileOutputStream file = new FileOutputStream(AUDIO_PATH + "/" + f.getOriginalFilename()); 
     file.write(f.getBytes()); 
     file.close(); 
    } 
    catch (FileNotFoundException ex) { 
     Logger.getLogger(SampleUploadController.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    catch (IOException ex) { 
      Logger.getLogger(SampleUploadController.class.getName()).log(Level.SEVERE, null, ex); 
    } 



    return new ModelAndView("upload", "msg", "File (" + f.getOriginalFilename() + ") successfully uploaded."); 
} 

} 주셔서 감사합니다

+0

이 질문을 해 주셔서 감사합니다.이 문제도 이미 유용 했으므로 매우 도움이되었습니다. – MetroidFan2002

답변

11

은 내가 ServletContext에()를 받고 생각 다음 realPath()가 작동 할 수 사용하지만 난 의 ServletContext에 대한 참조가없는

예. HttpServletRequest.getSession().getServletContext()

+0

완벽한,이 해결 된 것들이 나를 위해. 감사. –

+4

그러나 세션이없고 세션이없는 상태로 유지하려는 경우에는 작동하지 않습니다. axtavt의 답변을 참조하십시오. – Paul

26

ServletContext 참조를 얻으려면, 당신의 클래스가 구현할 수있는 참조 ServletContextAware

편집 :ServletContext은 빈 이름 servletContext에서 웹 응용 프로그램 컨테이너에 액세스 할 수 있습니다, 그래서 당신은 다른 빈에서처럼 삽입 할 수 봄.

+0

깔끔한, 나는 거기에 콩이 내장되어 있다는 것을 몰랐다. 감사. –

+1

이것은 더 나은 대답입니다. 세션이 없어도 작동하며 종속성 주입은 결국 스프링 방식입니다. – Paul

+0

이 작동하지 않습니다. 내가 서블릿 내부에 있지 않은 경우에 ... "컨텍스트"객체를 얻지 만 getContextPath는 null을 반환합니다. – OhadR

0

ServletContext을 사용하여 서버 URL을 가져 오는 것은 다른 환경에서 안전하지 않습니다.

속성 파일에서 URL을 검색하는 것이 좋습니다.

관련 문제