2008-10-22 4 views
0

이것은 작동하지 않습니다. 문제는 내가 무엇이 일어나야 하는지를 충분히 알지 못한다는 것입니다. 이 코드를 디버깅 할 수 없습니다. 임시 폴더 "temp"에 업로드를 저장 한 다음 애플릿으로 이동하려고합니다. 도와주세요? 서블릿에 분명히 액세스하고 있지만 업로드 된 파일을 찾을 수 없습니다 ... 미리 감사드립니다. -Apache 공유 사용 FileUpload

양식 (스크립틀릿을 사용하여 생성되는 문제가 발생할 수 있다면 여기를 넣어)이 자바 스크립트를 호출

<% 
out.write("<p>Upload a new game:</p>"); 
        out.write("<form name=\"uploadForm\" action=\"game.jsp\" " 
        + "method=\"POST\" enctype=\"multipart/form-data\">" 
        + "<input type=\"file\" name=\"uploadSelect\" value=\"\" width=\"20\" />" 
        + "<br><input type=\"submit\" value=\"Submit\" name=\"uploadSubmitButton\" " 
        + "onclick = \"submitToServlet2('UploadGameServlet');\">"   
        + "</form>"); 
%> 

:

다시 서블릿에 간다
function submitToServlet2(newAction) 
    { 
     document.uploadForm.action = newAction; 
    } 

(일부 중요한 요소가 숨어 있기 때문에 전체 코드가 포함되어 있음)

package org.project; 

import java.io.*; 
import java.util.Iterator; 
import java.util.List; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
// import servlet stuff 
import org.apache.commons.fileupload.*; 


public class UploadGameServlet extends HttpServlet { 

/** 
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. 
* @param request servlet request 
* @param response servlet response 
*/ 
protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 

    if (ServletFileUpload.isMultipartContent(request)) 
    { 
     try 
     { 
      // Create a factory for disk-based file items 
      FileItemFactory factory = new DiskFileItemFactory(); 

      // Create a new file upload handler 
      ServletFileUpload upload = new ServletFileUpload(factory); 

      // Parse the request 
      List items = upload.parseRequest(request); /* FileItem */ 

      File repositoryPath = new File("\\temp"); 
      DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); 
      diskFileItemFactory.setRepository(repositoryPath); 

      Iterator iter = items.iterator(); 
      while (iter.hasNext()) 
      { 
       FileItem item = (FileItem) iter.next(); 
       File uploadedFile = new File("\\applets"); 
       item.write(uploadedFile); 
      }    
     } 
     catch (FileUploadException ex) 
     { 
      Logger.getLogger(UploadGameServlet.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     catch (Exception ex) 
     { 
      Logger.getLogger(UploadGameServlet.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    PrintWriter out = response.getWriter(); 
    try { 
     out.println("<html>"); 
     out.println("<head>"); 
     out.println("<title>Servlet UploadGameServlet</title>"); 
     out.println("</head>"); 
     out.println("<body>"); 
     out.println("<h1>Servlet UploadGameServlet at " + request.getContextPath() + "</h1>"); 
     out.println("</body>"); 
     out.println("</html>"); 
    } finally { 
     out.close(); 
    } 
} 

}

+0

서블릿 코드를 디버그 할 수 없습니까? 서블릿에 액세스하고 있습니까? 요청을 제출하기 위해 submitToServlet2 함수에서 ** true **를 반환해야하는지 여부는 알 수 없습니다. –

+0

예, 서버가 표제를 출력합니다 ... 적어도 출력 선에 도달한다는 것을 알고 있습니다. 서블릿 코드를 어떻게 디버깅 할 수 있습니까? – pypmannetjies

+0

if 내부에 일부 로깅 문을 추가 할 수 있습니다. 또한 기록 된 예외가 있습니까? –

답변

6
File repositoryPath = new File("\\temp"); 
File uploadedFile = new File("\\applets"); 

선행 또는 절대 경로의 어떤 종류없이 이러한 파일에 액세스하려고하면, 현재 작업 디렉토리에 tempapplets라는 이름의 파일 (안 디렉토리)에 쓰기 위해 노력하고 있습니다. 응용 프로그램 서버에서 현재 작업 디렉토리는 보통 bin 폴더입니다 (사용하는 응용 프로그램 서버 등에 따라 다름).

제안 :

  1. 는 파일을 저장할 디렉토리를 참조하는 절대 경로 (바람직하게는 web.xml 파일에 저장 또는 등록 정보 파일)를 사용합니다.
  2. 쓰기를 원하는 파일의 이름을 지정해야합니다. 요청 당 임의의 임의의/고유 한 이름을 만들고 싶을 수도 있습니다.
  3. 키 입력을 자제하고 모든 Logger.getLogger(UploadGameServlet.class.getName()) 참조 대신 멤버 변수를 사용하십시오!
  4. 특히 데이터를 쓰고있는 곳을 확인하려면 디버깅을 추가하십시오. 예를 들어 repositoryPath.getAbsolutePath()의 결과를 기록하십시오.
+0

정말 고마워, 고마워! 이제 파일을 저장하지만 ... 파일 선택 입력 대신 제출 버튼의 값을 가져옵니다. 왜 그런지 아십니까? – pypmannetjies

+0

원래 코드에서 List 항목의 각 항목을 같은 파일에 쓰고있는 것처럼 보입니다. FileItem.write()이 어떻게 작동하는지 모르겠습니다.) 매번 파일을 덮어 쓸 수 있습니다. FileItem.getFieldName()을 확인하여 특정 조건에서만 파일에 쓸 수 있습니다. –

+0

오 마이! 그것은 작동합니다! 마침내 작동합니다! 정말 대단히 감사합니다! 당신은 아마도 방금 내 학기를 저장했습니다 :) – pypmannetjies