2016-09-11 4 views
-1

내 사이트에서 파일을 프로젝트 디렉토리에 저장하는 기능을 구현하려고합니다. 그것을하는 방법은 여기있다.request.getServletContext(). getRealPath(); src 대신 대상 디렉토리를 반환하고 있습니까?

@RequestMapping(value = "/upload", method = RequestMethod.POST) 
public String Upload(@RequestParam("file") MultipartFile file, Principal principal, HttpServletRequest request) throws IOException { 
    if (!file.isEmpty()) { 

       String uploadsDir = "/uploads/"; 
       String realPathtoUploads = request.getServletContext().getRealPath(uploadsDir); 
       if(! new File(realPathtoUploads).exists()) 
       { 
        new File(realPathtoUploads).mkdir(); 
       } 


       String orgName = file.getOriginalFilename(); 
       String filePath = realPathtoUploads + orgName; 
       File dest = new File(filePath); 
       file.transferTo(dest); 


     return "user"; 
    } 
    return "user"; 

} 

파일을 저장하고 있지만 대상 디렉토리에 저장 중입니다. 내 src 디렉토리에 파일을 저장해야하지 않고 내 대상을 저장하지 않아야합니까? src에 직접 연결되도록 어떻게 변경할 수 있습니까? 감사!

차이가 있다면 netbeans btw를 사용하고 있습니다.

+2

또는 거기에 파일을 가져옵니다 ... "대상"패키지 될 파일 계층이 포함되어 있으므로 ** 해당 IDE에서 코드가 실행되는 실제 디렉터리입니다 ** 매우 논리적입니다. – fvu

+0

아, 그래. 감사! – bbennett36

답변

1

모든 경로 관련 메서드는 실제로 컨테이너가 앱을 시작한 폴더를 기반으로 경로를 계산합니다. 따라서 Tomcat이나 Jetty 또는 다른 컨테이너를 아마도 maven을 사용하여 시작한 경우, maven이 전쟁과 다른 모든 자원을 배치하는 대상 폴더에서 응용 프로그램이 실행됩니다.

따라서 getRealPath는 실제로 응용 프로그램 위치를 가져 와서 상대 "/ uploads"를 연결합니다.

물론 컨테이너가 정상적으로 작동합니다.

귀하의 요구 사항은 달성 가능하지만 폴더 위치를 변경하는 것보다 경로를 직접 조작하도록 선택한 경우 수동으로 변경해야합니다. 당신은 예를 들어 할 수있는

:

String rootPath = "/home/user/"; 
String downlods = "downloads"; 

String realPathtoUploads = rootPath + downlods ; 

if(! new File(realPathtoUploads).exists()) { 
    new File(realPathtoUploads).mkdir(); 
} 

HTH, 갈

실제로 덤프하려는 이유 src 디렉토리도 잘 모르겠어요 디버깅 환경의 외부에 존재하지 않기 때문에
+0

이로써 해결되었습니다. 감사! – bbennett36

관련 문제