javaweb-番外篇-Commons-FileUpload組件上傳文件


一、Commons-FileUpload簡介

Commons-FileUpload組件

  Commons是Apache開放源代碼組織的一個Java子項目,其中的FileUpload是用來處理HTTP文件上傳的子項目

Commons-FileUpload組件特點

  使用簡單:可以方便地嵌入到JSP文件中,編寫少量代碼即可完成文件的上傳功能 能夠全程控制上傳內容 能夠對上傳文件的大小、類型進行控制

獲取Commons-FileUpload組件的方式

  http://commons.apache.org/fileupload下載Commons-FileUpload組件

    Commons-FileUpload組件類庫:commons-fileupload-1.2.2.jar

    Commons-FileUpload組件的API文檔: apidocs

  http://commons.apache.org/io下載Commons-IO組件 Commons-IO組件

    類庫:commons-io-2.4.jar

    Commons-IO組件的API文檔: commons-io-2.4\docs

二、Commons-FileUpload組件的API

三、Commons-FileUpload組件應用

四、代碼

index.jsp

<%@ 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>上傳</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">
  </head>
  
  <body>
   <form action="DoUpLoadServlet" enctype="multipart/form-data" method="post">
           <p>選擇圖片:<input type="file" name="nfile"></p> 
           <p><input type="submit" value="提交"></p>
   </form>
  </body>
</html>

DoUpLoadServlet

package com.qj.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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.FileUploadBase;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class DoUpLoadServlet
 */
@WebServlet("/DoUpLoadServlet")
public class DoUpLoadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DoUpLoadServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String uploadFileName = ""; //上傳的文件名
        String fieldName = "";  //表單字段元素的name屬性值
        PrintWriter out = response.getWriter();//獲取out對象
        //請求信息中的內容是否是multipart類型
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        //上傳文件的存儲路徑(服務器文件系統上的絕對文件路徑)
        String uploadFilePath = request.getSession().getServletContext().getRealPath("upload/" );
        //創建臨時文件目錄路徑
        File tempPatchFile=new File("d:\\temp\\buffer\\");
        if(!tempPatchFile.exists())  //判斷文件或目錄是否存在
            tempPatchFile.mkdirs();   //創建指定的目錄,包括所有必需但不存在的父目錄
        if (isMultipart) {
            DiskFileItemFactory factory=new DiskFileItemFactory();
            //設置緩沖區大小4kb
            factory.setSizeThreshold(4096);   
            //設置上傳文件用到臨時文件存放路徑
            factory.setRepository(tempPatchFile);   
            ServletFileUpload upload = new ServletFileUpload(factory);
            //設置單個文件的最大限制
            upload.setSizeMax(1024*30);   
            try {
                //解析form表單中所有文件
                List<FileItem> items = upload.parseRequest(request);
                Iterator<FileItem> iter = items.iterator();
                while (iter.hasNext()) {   //依次處理每個文件
                    FileItem item = (FileItem) iter.next();
                    if (!item.isFormField()){  //文件表單字段
                        String fileName = item.getName();
                        //通過Arrays類的asList()方法創建固定長度的集合
                        List<String> filType=Arrays.asList("gif","bmp","jpg");
                        String ext=fileName.substring(fileName.lastIndexOf(".")+1);
                        if(!filType.contains(ext))  //判斷文件類型是否在允許范圍內
                                out.print("上傳失敗,文件類型只能是gif、bmp、jpg");
                        else{
                            if (fileName != null && !fileName.equals("")) {
                                File fullFile = new File(item.getName());
                                File saveFile = new File(uploadFilePath, fullFile.getName());
                                item.write(saveFile);
                                uploadFileName = fullFile.getName();
                                out.print("上傳成功后的文件名是:"+uploadFileName+
                                ",文件大小是:"+item.getSize()+"bytes!");
        
                            }        
                        }
                    }
                }
            }catch(FileUploadBase.SizeLimitExceededException ex){
                out.print("上傳失敗,文件太大,單個文件的最大限制是:"+upload.getSizeMax()+"bytes!");    
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM