2012-09-25 6 views
1

내 프로젝트 폴더에 파일을 업로드하고 싶습니다. 나는 JSP 파일을 실행하고 검색하고 원하는 이미지를 선택하고 양식, 서블릿 실행을 제출하면서블릿을 사용하여 절대 경로로 이미지를 업로드하는 방법

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    File savedFile; 
    String destination; 

    List<FileItem> items = null; 
    try { 
     items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); 
    } catch (FileUploadException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    for (FileItem item : items) { 
     if (item.isFormField()) { 
      // Process regular form field (input type="text|radio|checkbox|etc", select, etc). 
     } else { 
      // Process form file field (input type="file"). 
      String fieldName = item.getFieldName(); 
      String fileName = FilenameUtils.getName(item.getName()); 
      InputStream fileContent = item.getInputStream(); 

      String userName = (String) session.getAttribute("newUser"); 

      destination = getServletConfig().getServletContext().getContextPath() + "\\" + userName + ".jpeg"; 
      savedFile = new File(destination); 

      //Check if file exists 
      if(!savedFile.exists()) 
       savedFile.createNewFile(); 

      BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(savedFile)); 
      byte[] buffer = new byte[1024]; 
      int len; 

      //Read from file and write to new file destination 
      while((len = fileContent.read(buffer)) >= 0) { 
       bos.write(buffer, 0, len); 
      } 

      //Closing the streams 
      fileContent.close(); 
      bos.close(); 

     } 
    } 

} 

하지만, IOException가 슬로우 다음과 같이 내 코드입니다. 예외는 내가 savedFile.createNewFile()을 사용하여 새 경로를 만드는 행에 의해 throw됩니다. 이 코드를 사용하기 전에 또 다른 FileNotFoundException을 던졌습니다. 내가 제공 한 경로가 맞는지 확실하지 않습니다.

답변

2

getRealPath() 메서드를 사용해보십시오.

String fileName="/" + userName + ".jpeg"; 
destination = getServletContext().getRealPath(fileName); 
savedFile = new File(destination); 
+0

** userName **은 null을 반환하는 세션 개체에서 액세스 한 문자열 값입니다. 그것은 가치가 다른 서블릿에 설정되어 있지만 왜 null을 반환하는지 모르겠습니다. 형식을 인코딩하는 효과가 있습니까? 그러나 세션 개체는 세션 전체에서 계속 사용할 수 있어야합니다. 그렇지 않니? –

관련 문제