2009-09-23 6 views
2
out.println("<tr><td><FORM ENCTYPE='multipart/form-data'"+ 
          "method='POST' action='ProcessUpload' ></td>"+ 
          "<td><INPUT TYPE='file' NAME='mptest'></td>"+ 
          "<td><INPUT TYPE='submit' VALUE='upload'></td>"+ 
          "</FORM></tr>"); 

이 코드는 파일을 업로드하는 데 도움이 될 수 있지만 업로드를 클릭하면 문제가 발생합니다. 특정 디렉토리에 업로드 된 파일을 저장할 수 없습니다. 누구나 제안 할 수 있습니까?아파치를 사용하지 않고 java 서블릿에 파일을 업로드하고 저장하는 방법은 무엇입니까?

+1

"apache"란 무엇을 의미합니까? 멀티 파트 요청을 처리하는 공유 라이브러리를 의미합니까, 일반적으로 Tomcat을 의미합니까? –

+0

나중에 멀티 파트 요청을 처리하는 공용 라이브러리를 의미합니다. Sry, 나는 Tomcat을 사용하지 않았다. –

답변

2

을 코드 단순히 위 업로드 버튼에 대한 HTML을 출력합니다. 양식이 시작될 수있는 업로드 요청은 아무 것도하지 않습니다.

왜 내가 Apache Commons FileUpload을 사용하지 않기를 요청할 수 있습니까? 이것을 사용하지 않으려면 RFC 1867을 구현해야합니다. 구현이 이미 존재할 때 많은 시간과 노력이 낭비됩니다.

+0

사실 나는 서블릿에 Apache FileUpload를 구현하는 방법이 없습니다. 그래서 파일을 업로드하고 저장하는 간단한 방법을 찾으십시오. 나는 아파치를 가져 오려고하지만 아파치 API를 다운로드 할 필요가있는 것 같다. 나는 여전히 자바에 익숙하지 않으므로 그렇게 할 수 없다. 나 한테 그 아이디어 좀 해줄 수있어? 정말 고마워 . –

+1

타사 라이브러리를 사용하는 것은 Java로 작업하는 핵심 부분입니다. 서블릿으로 작업하기 전에 알아야 할 것이지만 각각 서블릿에 대해 알아야한다고 생각합니다. 타사 라이브러리를 포함하는 방법은 빌드 시스템 및 IDE에 따라 다릅니다. 예. 라이브러리를 다운로드해야합니다. 위의 Commons FileUpload 링크에서 다운로드 링크를 찾을 수 있습니다. 그런 다음 클래스 경로에 넣어야합니다. 경우에 따라 프로젝트의 WEB-INF \ lib에 던지기 만하면됩니다. Maven 또는 Ivy와 같은 다른 프로젝트에서는 프로젝트 파일을 편집해야하며 빌드 도구가 세부 정보를 처리합니다. –

+0

필자는 Commons FileUpload를 Commons IO에 의존한다고 덧붙여 야합니다. 이것에 대한 다운로드 링크는 위의 FileUpload 링크에서도 찾을 수 있습니다. 또한 FileUpload를 사용하려면 프로젝트에이 파일을 포함시켜야합니다. –

0

Apache Commons FileUpload는 다른 사람들이 제안한대로 갈 수있는 방법입니다. 당신이 어떤 이유로 그것을 사용하지 않으려면, 당신은 또한

http://metatemplate.googlecode.com/svn/trunk/metatemplate/java-app-framework/tomcat-adapter/src/com/oreilly/servlet/MultipartRequest.java

이는 FileUpload만큼 강력한 아니지만 간단한 파일 업로드 잘 작동이 클래스를 볼 수 있습니다.

+0

나는 바람둥이를 사용하지 않았다. 글래스 피쉬를 사용한다. 고마워 –

0

당신은 당신이 예를 들어 처리하도록 processUpload 서블릿을 작성해야 여러 부분 요청을 사용하려면 :

private String fileSavePath; 

public void init(){ 
    fileSavePath = getServletContext().getRealPath("/") + "data"; 
} 


public void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws IOException, ServletException{ 
    MultipartRequest mpr = new MultipartRequest(request, fileSavePath); 
} 

을 그리고 난 당신의 문제로 서블릿에서 정말 것 출력되지 순수한 HTML -에 파견 시도 jsp - 평범한 html 만 사용하면 더 좋은 결과를 얻을 수 있습니다.

0

나는 두 번째 MLK의 제안과 Users Guide to Commons FileUpload을 읽는 것은 당신이 시작하는 데 도움이 될 것입니다 생각합니다. 그것은 파일 수신을 처리 할 것입니다,하지만 당신은 여전히 ​​그것을 어디에 저장해야하는지 알려줘야합니다. 설명에서 사용자가 파일을 저장할 "위치"를 선택하게하는 것처럼 들립니다. 이 부분을 직접 작성해야합니다.

서블릿에 빠른 리스터를 해킹했습니다. 다른 모든 의견은 정확합니다. 서블릿에 html을 작성하는 것은 좋지 않지만 좋은 학습 경험처럼 들립니다.

package somepackage; 

import java.io.File; 
import java.io.IOException; 

import java.io.Writer; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class DirectoryChooserServlet extends HttpServlet { 
    public DirectoryChooserServlet() { 
     super(); 
    } 

    @Override 
    protected void doGet(HttpServletRequest request, 
         HttpServletResponse response) throws ServletException, IOException { 

     Writer w = response.getWriter(); 
     w.write("<html><body>"); 
     String action = request.getParameter("action"); 
     String directory = request.getParameter("directory"); 
     String startDirectory = "/private"; 
     if ("list".equals(action)) { 
      startDirectory = directory; 
     } 
     File dir = new File(startDirectory); 
     if (dir != null) { 
      w.write("<a href=\"?action=list&directory="+dir.getParentFile().getAbsolutePath()+"\">..</a><br/>"); 
      for(File f: dir.listFiles()) { 
       if(f.isDirectory()) { 
        w.write("<a href=\"?action=list&directory="+f.getAbsolutePath()+"\">" + f.getName() + "</a><br/>");  
       }    
      } 
     } 
     w.write("</body></html>"); 
    } 
} 
관련 문제