java는common-fileupload를 사용하여 파일 업로드를 실현합니다

파일 업로드는 사이트에서 매우 자주 사용하는 기능으로 Servlet을 직접 사용하여 업로드 파일을 가져오려면 요청 파라미터를 해석해야 하기 때문에 비교적 번거롭기 때문에apache의 소스 오픈 도구,common-fileupload를 사용합니다.이jar 패키지는 아파치 홈페이지에서 찾을 수 있고struts의lib 폴더 아래에서 찾을 수 있습니다.struts가 업로드하는 기능은 이를 바탕으로 이루어진 것입니다.
common-fileupload는common-io라는 가방에 의존하기 때문에 이 가방을 다운로드해야 합니다.프로젝트 경로 아래로 가져옵니다.
사용 코드는 다음과 같습니다.

package oop.hg.ytu.servlet; 
 
import java.io.File; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.List; 
 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
 
import oop.hu.ytu.dao.UploadDomain; 
 
import org.apache.commons.fileupload.FileItem; 
import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 
 
public class Upload extends HttpServlet { 
 
  /** 
   *   
   */ 
  private static final long serialVersionUID = 1L; 
 
  public void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
  // String describe = request.getParameter("describe"); 
    DiskFileItemFactory factory = new DiskFileItemFactory(); 
    @SuppressWarnings("deprecation") 
    String path = request.getRealPath("/upload");//  
   
    factory.setRepository(new File(path)); 
    factory.setSizeThreshold(1024*1024);//  
     
    ServletFileUpload upload = new ServletFileUpload(factory); 
    upload.setSizeMax(-1);// ,-1  
    try { 
      @SuppressWarnings("unchecked") 
      List<FileItem> list = upload.parseRequest(request); 
      String va = null; 
      for(FileItem item : list){ 
    //   String name = item.getFieldName(); 
        if(item.isFormField()){//  
           
          va = item.getString("UTF-8"); 
        // System.out.println(name+"="+va); 
      ///   request.setAttribute(name, value); 
        }else{ 
          String value = item.getName();//  
          int start = value.lastIndexOf("\\"); 
          String fileName = value.substring(start+1); 
      //   request.setAttribute(name, fileName); 
          InputStream in = item.getInputStream(); 
          UploadDomain dao = new UploadDomain(); 
          //item.write(new File(realPath,fileName)); 
          int index = fileName.lastIndexOf("."); 
          String realFileName = fileName.substring(0,index); 
          String type = fileName.substring(index+1); 
          dao.insert(in, realFileName,type,va);//  
           
        } 
      } 
    } catch (Exception e) { 
       
      e.printStackTrace(); 
    } 
  } 
 
  public void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
    doGet(request, response); 
 
  } 
 
}
여기에 업로드된 흐름이나 폼 안의 매개 변수, 예를 들어 텍스트 상자에 정보를 제출하고 데이터베이스에 삽입하는지 판단한다.데이터베이스 삽입
코드는 다음과 같습니다.

package oop.hu.ytu.dao; 
 
import java.io.InputStream; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
 
import oop.hg.ytu.utils.JdbcUtils; 
 
/** 
 *   
 * @author Administrator 
 * 
 */ 
public class UploadDomain { 
  /** 
   *   
   */ 
  public void insert(InputStream in, String fileName, String type,String describe) throws Exception{//   
    Connection conn = null;  
    PreparedStatement ps = null;  
    ResultSet rs = null;  
    System.out.println(describe); 
    try {  
      // 2.   
      conn = JdbcUtils.getConnection(); 
      // 3.   
      String sql = "insert into fileupload(file,filename,type,des) values (?,?,?,?)";  
      ps = conn.prepareStatement(sql);  
      ps.setBlob(1, in); 
      ps.setString(2, fileName); 
      ps.setString(3, type); 
      ps.setString(4, describe); 
      // 4.   
      ps.executeUpdate();  
  
      in.close();  
  
      
    } finally {  
      JdbcUtils.free(rs, ps, conn);  
    }  
  }  
} 
데이터베이스 기본 가격 문의 크기 제한이 발생할 수 있습니다. mysql 설치 디렉터리 아래에 my를 설치해야 합니다.ini 아래 설정을 변경합니다.
[mysqld] 
max_allowed_packet=64M 
이렇게 하면 돼.물론 인코딩 형식에 주의하세요.파일 올리면 돼.그리고 제 열명은 describe로 설정되어 있습니다. 결과와 Mysql 보류 문자입니다.
갑자기 정보를 삽입할 수 없는 현상이 나타나니 앞으로 반드시 주의해야 한다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기