서블릿 파일 업로드


서블릿은 HTML 양식 태그와 함께 사용되어 사용자가 서버에 파일을 업로드할 수 있습니다. 업로드된 파일은 텍스트 파일, 이미지 파일 또는 모든 문서일 수 있습니다.

파일 업로드 양식 만들기

다음 HTML 코드는 파일 업로드 양식을 만듭니다. 다음 사항에 유의해야 합니다.

  • 형식 method 속성은 POST 메서드로 설정되어야 하며, GET 메서드는 설정할 수 없습니다. 사용된.

  • formenctype 속성은 multipart/form-data.

  • form으로 설정되어야 합니다. action 속성은 백엔드 서버에서 파일 업로드를 처리하는 서블릿 파일로 설정되어야 합니다. 아래 예에서는 UploadServlet 서블릿을 사용하여 파일을 업로드합니다.

  • 단일 파일을 업로드하려면 type="file" 속성이 있는 단일 <input .../> 태그를 사용해야 합니다. 여러 파일 업로드를 허용하려면 이름 속성 값이 다른 여러 입력 태그를 포함하십시오. 입력 태그는 이름 속성에 대해 서로 다른 값을 갖습니다. 브라우저는 찾아보기 버튼을 각 입력 태그와 연결합니다.

 <html>
<head>
<title>文件上传表单</title>
</head>
<body>
<h3>文件上传:</h3>
请选择要上传的文件:<br />
<form action="UploadServlet" method="post"
                        enctype="multipart/form-data">
<input type="file" name="file" size="50" />
<br />
<input type="submit" value="上传文件" />
</form>
</body>
</html>

다음 결과가 표시되어 사용자가 로컬 컴퓨터에서 파일을 선택할 수 있습니다. 사용자가 "파일 업로드"를 클릭하면 양식이 파일과 함께 제출됩니다. 로컬 컴퓨터에서 선택됨:

 <b>文件上传:</b> 
请选择要上传的文件:<br /> 
<input type="file" name="file" size="50" /> 
<br /> 
<input type="button" value="上传文件" /> 
<br /> 
注:这只是虚拟的表单,不会正常工作。

백그라운드 서블릿 작성

다음은 업로드된 파일을 수락하고 < 데이터의 Tomcat-installation-directory>/webapps/. 이 디렉토리 이름은 아래와 같이 web.xml의 context-param 요소와 같은 외부 구성을 사용하여 추가할 수도 있습니다.

 <web-app>
....
<context-param> 
    <description>Location to store uploaded file</description> 
    <param-name>file-upload</param-name> 
    <param-value>
         c:\apache-tomcat-5.5.29\webapps\data\
     </param-value> 
</context-param>
....
</web-app>
다음은 UploadServlet의 소스 코드입니다. 여러 파일 업로드를 처리할 수 있습니다. 진행하기 전에 다음 사항을 확인하세요.

    아래 예는 FileUpload에 따라 다르므로 클래스 경로에
  • commons-fileupload의 최신 버전이 있는지 확인하세요<🎜. > 파일. http://commons.apache.org/fileupload/에서 다운로드할 수 있습니다.

    FileUpload는 Commons IO에 따라 다르므로 클래스 경로에 최신 버전의
  • commons-io-x.x.jar
  • 파일이 있어야 합니다. http://commons.apache.org/io/에서 다운로드할 수 있습니다.

    다음 예를 테스트할 때 업로드하는 파일 크기는
  • maxFileSize
  • 보다 클 수 없습니다. 그렇지 않으면 파일이 업로드되지 않습니다.

    c:temp 및 c:apache-tomcat-5.5.29webappsdata 디렉터리가 미리 생성되었는지 확인하세요.
  • // 导入必需的 java 库
    import java.io.*;
    import java.util.*;
     
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUploadException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    import org.apache.commons.io.output.*;
    
    public class UploadServlet extends HttpServlet {
       
       private boolean isMultipart;
       private String filePath;
       private int maxFileSize = 50 * 1024;
       private int maxMemSize = 4 * 1024;
       private File file ;
    
       public void init( ){
          // 获取文件将被存储的位置
          filePath = 
                 getServletContext().getInitParameter("file-upload"); 
       }
       public void doPost(HttpServletRequest request, 
                   HttpServletResponse response)
                  throws ServletException, java.io.IOException {
          // 检查我们有一个文件上传请求
          isMultipart = ServletFileUpload.isMultipartContent(request);
          response.setContentType("text/html");
          java.io.PrintWriter out = response.getWriter( );
          if( !isMultipart ){
             out.println("<html>");
             out.println("<head>");
             out.println("<title>Servlet upload</title>");  
             out.println("</head>");
             out.println("<body>");
             out.println("<p>No file uploaded</p>"); 
             out.println("</body>");
             out.println("</html>");
             return;
          }
          DiskFileItemFactory factory = new DiskFileItemFactory();
          // 文件大小的最大值将被存储在内存中
          factory.setSizeThreshold(maxMemSize);
          // Location to save data that is larger than maxMemSize.
          factory.setRepository(new File("c:\temp"));
    
          // 创建一个新的文件上传处理程序
          ServletFileUpload upload = new ServletFileUpload(factory);
          // 允许上传的文件大小的最大值
          upload.setSizeMax( maxFileSize );
    
          try{ 
          // 解析请求,获取文件项
          List fileItems = upload.parseRequest(request);
    	
          // 处理上传的文件项
          Iterator i = fileItems.iterator();
    
          out.println("<html>");
          out.println("<head>");
          out.println("<title>Servlet upload</title>");  
          out.println("</head>");
          out.println("<body>");
          while ( i.hasNext () ) 
          {
             FileItem fi = (FileItem)i.next();
             if ( !fi.isFormField () )	
             {
                // 获取上传文件的参数
                String fieldName = fi.getFieldName();
                String fileName = fi.getName();
                String contentType = fi.getContentType();
                boolean isInMemory = fi.isInMemory();
                long sizeInBytes = fi.getSize();
                // 写入文件
                if( fileName.lastIndexOf("\") >= 0 ){
                   file = new File( filePath + 
                   fileName.substring( fileName.lastIndexOf("\"))) ;
                }else{
                   file = new File( filePath + 
                   fileName.substring(fileName.lastIndexOf("\")+1)) ;
                }
                fi.write( file ) ;
                out.println("Uploaded Filename: " + fileName + "<br>");
             }
          }
          out.println("</body>");
          out.println("</html>");
       }catch(Exception ex) {
           System.out.println(ex);
       }
       }
       public void doGet(HttpServletRequest request, 
                           HttpServletResponse response)
            throws ServletException, java.io.IOException {
            
            throw new ServletException("GET method used with " +
                    getClass( ).getName( )+": POST method required.");
       } 
    }

    서블릿 컴파일 및 실행
위의 Servlet UploadServlet을 컴파일하고 다음과 같이 web.xml 파일에 필수 항목을 생성합니다.

 <servlet>
   <servlet-name>UploadServlet</servlet-name>
   <servlet-class>UploadServlet</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>UploadServlet</servlet-name>
   <url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>

이제 위에서 만든 HTML 양식을 사용하여 파일을 업로드해 보세요. 브라우저에서 http://localhost:8080/UploadFile.htm을 방문하면 다음 결과가 표시되며, 이는 로컬 컴퓨터에서 파일을 업로드하는 데 도움이 됩니다.

 <b>文件上传:</b> 
请选择要上传的文件:<br /> 
<input type="file" name="file" size="50" /> 
<br /> 
<input type="button" value="上传文件" />

Servelt 스크립트가 제대로 작동하면 파일이 c:apache-tomcat-5.5.29webappsdata 디렉터리에 업로드됩니다.