JavaWeb 파일 업로드 시작 자습서

1. 파일 업로드 원리
1. 파일 업로드의 전제 조건:
a,form 폼의method는post이어야 합니다
b.form 폼의 enctype는 multipart/form-data(POST 요청 방식을 결정하고 본문의 데이터 형식을 요청해야 함)
c,form에서 input를 제공하는 type은 파일 형식의 파일 업로드 영역입니다
둘째, 제3자 구성 요소를 이용하여 파일 업로드를 실현한다
1. commons-fileupload 구성 요소:
jar:commons-fileupload.jar 
commons-io.jar 
2, 코어 클래스 또는 인터페이스
DiskFileItemFactory: 환경 설정
public void setSizeThreshold(int sizeThreshold): 버퍼 크기를 설정합니다.기본값은 10Kb입니다.
업로드된 파일이 버퍼 크기를 초과하면 fileupload 구성 요소는 임시 파일 캐시를 사용하여 파일을 업로드합니다
public void setRepository (java.io.File repository): 임시 파일의 저장 디렉터리를 설정합니다.기본값은 시스템의 임시 파일 저장 디렉터리입니다.
ServletFileUpload: 핵심 업로드 클래스(주요 역할: 요청의 본문 내용 해석)
boolean is MultipartContent(Http ServletRequest?request): 사용자의 폼의 enctype가 multipart/form-data 형식인지 판단합니다.
List parseRequest(HttpServletRequest request): 요청 본문의 내용 해석
setFileSizeMax(4*1024*1024);//단일 업로드 파일 크기 설정
upload.setSizeMax(6*1024*1024);//총 파일 크기 설정
FileItem: 양식의 입력 도메인을 나타냅니다.
boolean isFormField(): 일반 필드인지 여부
String getFieldName: 일반 필드의 필드 이름 가져오기
String getString(): 일반 필드 값 가져오기
InputStream getInputStream(): 업로드 필드의 입력 스트림 가져오기
String getName(): 업로드된 파일 이름 가져오기
실례: 먼저 WEB-INF 디렉터리 아래에 files 폴더를 만듭니다. 즉, 파일이 여기에 업로드되고 다른 사람이 직접 접근하지 않도록 해야 합니다.
1. 파일의 실제 경로 가져오기
String storePath = getServletContext().getRealPath("/WEB-INF/files");
2. 환경 설정
DiskFileItemFactory factory = new DiskFileItemFactory();//기본 캐시와 임시 파일로 저장된 곳
3. 표 전송 방식 판단

 boolean isMultipart = ServletFileUpload.isMultipartContent(request);
  if(!isMultipart)
  {
  System.out.println(" !");
  return;
  }

4. 파일 업로드 핵심 클래스

ServletFileUpload upload = new ServletFileUpload(factory);5.  


 // 
         List<FileItem> items = upload.parseRequest(request);
  for(FileItem item: items)
  {
  if(item.isFormField()){// , 
    String fieldName = item.getFieldName();// 
    String fieldValue = item.getString(); // 
    System.out.println(fieldName+"="+fieldValue);
  }else// 
  {
   InputStream in = item.getInputStream();
   //            C:\Users\Administrator\Desktop\a.txt
   String name = item.getName();  //  a.txt
   String fileName = name.substring(name.lastIndexOf("\\")+1);
   // 
   String storeFile = storePath+"\\"+fileName;// 
   OutputStream out = new FileOutputStream(storeFile);
   byte[] b = new byte[1024];
   int len = -1;
   while((len=in.read(b))!=-1)
   {
   out.write(b, 0, len);
   }
   in.close();// 
   out.close();
  }
  }

양식을 하나 쓰다

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <base href="<%=basePath%>">
  
  <title>My JSP '1.jsp' starting page</title>
  
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">  
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

 </head>
 
 <body>
 <form action="${pageContext.request.contextPath}/servlet/UploadServlet2" method="post" enctype="multipart/form-data">
   <input type="text" name="username"/> <br/>
  <input type="file" name="f1"/><br/>
  <input type="file" name="f2"/><br/>
  <input type="submit" value=" "/>
 </form>
 </body>
</html>
제출 servlet: Upload Servlet2 작성

package com.liuzhen.upload;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

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;
// 
public class UploadServlet2 extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
 
 // 
 request.setCharacterEncoding("UTF-8");
 response.setContentType("text/html;charset=UTF-8");
 try {
  // 
  String storePath = getServletContext().getRealPath("/WEB-INF/files");
  // 
  DiskFileItemFactory factory = new DiskFileItemFactory();
  //  form enctype=multipart/form-data
  boolean isMultipart = ServletFileUpload.isMultipartContent(request);
  if(!isMultipart)
  {
  System.out.println(" !");
  return;
  }
  ServletFileUpload upload = new ServletFileUpload(factory);
  // 
  List<FileItem> items = upload.parseRequest(request);
  for(FileItem item: items)
  {
  if(item.isFormField()){// , 
    String fieldName = item.getFieldName();// 
    String fieldValue = item.getString(); // 
    System.out.println(fieldName+"="+fieldValue);
  }else// 
  {
   InputStream in = item.getInputStream();
   //            C:\Users\Administrator\Desktop\a.txt
   String name = item.getName();  //  a.txt
   String fileName = name.substring(name.lastIndexOf("\\")+1);
   // 
   String storeFile = storePath+"\\"+fileName;// 
   OutputStream out = new FileOutputStream(storeFile);
   byte[] b = new byte[1024];
   int len = -1;
   while((len=in.read(b))!=-1)
   {
   out.write(b, 0, len);
   }
   in.close();// 
   out.close();
  }
  }
 } catch (FileUploadException e) {
  throw new RuntimeException(e);
 }

 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
      doGet(request, response);
 }

}

업로드된 파일은 Tomcat 응용 프로그램에 있습니다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기