자바 기본 편 --- 파일 업로드 (commons - FileUpload 구성 요소)

스마트 업로드 구성 요소 업로드 설명
FileUpload 는 Apache 조직 (www. apache. org) 이 제공 하 는 무료 업로드 구성 요소 로 Apache 사이트 에서 직접 다운로드 (다운로드 주소:http://commons.apache.org/fileupload/) 본 논문 에서 사용 하 는 버 전 은 1.2.1 이지 만 FileUpload 구성 요소 자 체 는 comons 구성 요소 에 의존 합 니 다.그래서 아파 치 에서 이 구성 요 소 를 다운로드 할 때 comons 구성 요소 의 IO 패키지 와 함께 다운로드 해 야 합 니 다 (다운로드 주소:http://commons.apache.org/io/) 
commons - fileUpload 업로드 구성 요 소 는 중국어 에 대해 좋 은 처 리 를 했 습 니 다. 업로드 파일 에 중국어 오류 가 발생 하지 않 고 현재 가장 광범 위 한 구성 요소 입 니 다.
commons - fileupload - 1.2.1. jar 와 commons - io - 1.4. jar 를 TOMCAT 에 설정 합 니 다.HOME / lib / 디 렉 터 리 중
³FileUpload 의 구체 적 인 업로드 작업 은 SmartUpload 에 비해 매우 복잡 합 니 다. 다음은 FileUpload 업로드 의 기본 절 차 를 살 펴 보 겠 습 니 다.
1 디스크 공장 만 들 기: DiskFileItemFactory factory = new DiskFileItemFactory ();
생 성 처리 도구: ServletFileUpload upload = new ServletFileUpload (factory);
업로드 파일 크기 설정: upload. setFileSize Max (3145728);
모든 내용 수신: List < FileItem > items = upload. parseRequest (request);
 
업로드 원리
fileupload 구성 요 소 를 사용 하여 전체 데 이 터 를 받 은 후 모든 데 이 터 를 List 집합 에 저장 하면 Iterator 로 각각 출력 해 야 하지만 일반 텍스트 데이터 와 업로드 파일 이 있 기 때문에 업로드 내용 은 하나의 FileItem 류 대상 으로 표시 합 니 다.
따라서 Iterator 를 사용 하여 모든 FileItem 대상 을 순서대로 꺼 낼 때 FileItem 류 의 isFormField () 방법 으로 현재 작업 의 내용 이 일반 텍스트 인지 업로드 파일 인지 판단 할 수 있 습 니 다. 파일 을 업로드 하 는 경우 파일 의 내용 을 순서대로 추출 할 수 있 습 니 다.일반적인 텍스트 라면 getString () 방법 으로 구체 적 인 정 보 를 얻 습 니 다.
 
 
구성 요소 업로드 코드 인 스 턴 스 1
html 코드
<html>
<head><title>commons-FileUpload    </title></head>
<body>
<form action="fileupload_demo01.jsp" method="post" enctype="multipart/form-data"><input type="text" name="uname"><br><input type="file" name="pic"><br>
    <input type="submit" value="  ">
    <input type="reset" value="  ">
</form>
</body>
</html>

jsp 코드
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>
<%@ page import="org.apache.commons.fileupload.servlet.*"%>
<html>
<head><title>commons-FileUpload    </title></head>
<body>
<%
    DiskFileItemFactory factory = new DiskFileItemFactory() ;
    ServletFileUpload upload= new ServletFileUpload(factory) ;
    upload.setFileSizeMax(3 * 1024 * 1024) ;    //     3M
    List<FileItem> items = upload.parseRequest(request) ; //       
    Iterator<FileItem> iter = items.iterator() ;
    while(iter.hasNext()){
        FileItem item = iter.next() ;
        String fieldName = item.getFieldName() ;    //          
%>
        <ul><h4><%=fieldName%> --> <%=item.isFormField()%></h4>
<%
        if(!item.isFormField()){        //       
            String fileName = item.getName() ;    //        
            String contentType = item.getContentType() ;    //     
            long sizeInBytes = item.getSize() ;
%>
            <li><%=fileName%>
            <li><%=contentType%>
            <li><%=sizeInBytes%>
<%
        } else {
            String value = item.getString() ;
%>
            <li><%=value%>
<%
        }
%>        </ul>
<%
    }
%>
</body>
</html>

구성 요소 업로드 코드 인 스 턴 스 2
<html>
<head><title>commons-FileUpload    </title></head>
<body>
<form action="fileupload_demo02.jsp" method="post" enctype="multipart/form-data"><input type="text" name="uname"><br><input type="file" name="pic1"><br><input type="file" name="pic2"><br><input type="file" name="pic3"><br>
    <input type="submit" value="  ">
    <input type="reset" value="  ">
</form>
</body>
</html>

JSP 코드
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*,java.io.*"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>
<%@ page import="org.apache.commons.fileupload.servlet.*"%>
<%@ page import="cn.mldn.lxh.util.*"%>
<html>
<head><title>commons-fileUpload       </title></head>
<body>
<%
    DiskFileItemFactory factory = new DiskFileItemFactory() ;
    factory.setRepository(new File(this.getServletContext().getRealPath("/") + "uploadtemp")) ;        //             
    ServletFileUpload upload = new ServletFileUpload(factory) ;
    upload.setFileSizeMax(3 * 1024 * 1024) ;    //     3M
    List<FileItem> items = upload.parseRequest(request) ; //       
    Iterator<FileItem> iter = items.iterator() ;
    IPTimeStamp its = new IPTimeStamp(/* request.getRemoteAddr() */) ;
    while(iter.hasNext()){
        FileItem item = iter.next() ;
        String fieldName = item.getFieldName() ;    //          
%>
        <ul><h4><%=fieldName%> --> <%=item.isFormField()%></h4>
<%
        if(!item.isFormField()){        //       
            File saveFile = null ;
            InputStream input = null ;
            OutputStream output = null ;
            input = item.getInputStream() ;
             output = new FileOutputStream(new File(this.getServletContext().getRealPath("/")+"upload"+File.separator+its.getIPTimeRand()+"."+item.getName().split("\\.")[1])) ;
             int temp = 0 ;
            byte data[] = new byte[512] ;
            while((temp=input.read(data,0,512))!=-1){
                output.write(data) ;    //     
            }
            input.close() ;
            output.close() ;  
        } else {
            String value = item.getString() ;
%>
            <li><%=value%>
<%
        }
%>        </ul>
<%
    }
%>
</body>
</html>

메모: 이 코드 는 프로젝트 를 만 들 때 프로젝트 이름 아래 upload 폴 더 를 만들어 야 정상적으로 실 행 됩 니 다.
FileUpload 구성 요소 의 불편 한 점:
request. getParameter () 방법 을 사용 하 는 것 처럼 제출 한 인 자 를 정확하게 얻 을 수 없습니다
request. getParameterValues () 를 사용 하 는 것 처럼 제출 인 자 를 정확하게 얻 을 수 없습니다
4. 567917. 모든 업로드 파일 은 순서대로 판단 해 야 각각 저장 할 수 있 고 한꺼번에 대량으로 저장 할 수 없습니다

좋은 웹페이지 즐겨찾기