用Common FileUpload 實現文件的上傳

b77m 9年前發布 | 7K 次閱讀 Java 文件上傳

Apache common fileUpload 來實現!本文采用的jsp+servlet 來實現的上傳,并將文件存儲到服務器端!

          看一下項目的布局,可以看到要引用兩個文件,commons-fileupload-1.3.1.jar 和commons-io-1.3.2.jar ,這兩個文件 直接去官網就可以下載,很好找到!

       

         我們先來看一下FileUpload.jsp的頁面代碼!一定要注意form的提交方式為post 提交,編碼類型為enctype="multipart/form-data"編碼格式。 本例子是實現的圖片的上傳,所以對圖片的格式進行了驗證,其他文件類型的上傳同樣的驗證方式就可以,不過要改一下文件后綴名!

<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
<script type="text/javascript">
//指定允許的上傳文件類型
var extArray = new Array(".jpg",".png",".jpeg",".gif");
var allowFormSubmit=false;
//有哪些限制
function LimitAttach(form, file){
var allowSubmit = false;
if (!file){
alert("請先選擇文件,然后在上傳!");
return;
}
while (file.indexOf("\") != -1){
file = file.slice(file.indexOf("\") + 1);
}
var ext = file.slice(file.indexOf(".")).toLowerCase();
for (var i = 0; i < extArray.length; i++) {
if (extArray[i] == ext){
allowSubmit = true;
break;
}
}
if (allowSubmit){
//符合條件, 發給指定的servlet
form.submit();
form.method="post";
form.action="servlet/UploadHandleServlet";

    }else{ //檢測上傳文件類型  

        alert("只能上傳以下格式的文件:"+ (extArray.join("")) + "\n請重新選擇再上傳.");  
    }  
}  

</script>
</head>
<body>
<form name="upform" target="_self" id="uploadForm" enctype="multipart/form-data">
<input name="uploadfile" size="40" type="file" >
<input name="upload" type="submit" onclick="LimitAttach(this.form,this.form.uploadfile.value)" value="上傳"/>
</form>
</body>
</html> </pre>
     而在servlet 端 的工作過程是1. 創建一個文件的解析對象, 然后對上傳文件的大小做一個限制, 獲取上傳文件, 將文件存儲服務器的文件夾中! 下邊看一下servlet的代碼, servlet的使用要在配置文件中進行配置!具體如何配置 就參見百度! 這里不再介紹!

package com.tgb.test.Servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadHandleServlet extends HttpServlet {

private File uploadPath;  
private File tempPath;  

public void doGet(HttpServletRequest request, HttpServletResponse response)  
        throws ServletException, IOException {  
    //1 創建文件解析對象  
    DiskFileItemFactory factory = new DiskFileItemFactory();  
    factory.setSizeThreshold(4096);  
    factory.setRepository(tempPath);  

    ServletFileUpload upload = new ServletFileUpload(factory);  
    upload.setSizeMax(1000000 * 20);  
    try {  
        //獲取上傳文件   
        List fileItems = upload.parseRequest(request);  
        String itemNo = "";  
        for (Iterator iter = fileItems.iterator(); iter.hasNext();) {  
            FileItem item = (FileItem) iter.next();  

            //是普通的表單輸入域  
            if(item.isFormField()) {  
                if ("itemNo".equals(item.getFieldName())) {  
                    itemNo = item.getString();  
                }  
            }  
            //是否為input="type"輸入域  
            if (!item.isFormField()) {  
                String fileName = item.getName();  
                long size = item.getSize();  
                if ((fileName == null || fileName.equals("")) && size == 0) {  
                    continue;  
                }  
                //截取字符串 如:C:\WINDOWS\Debug\PASSWD.LOG  
                fileName = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length());  
                //將文件存入指定的文件  
                item.write(new File(uploadPath, fileName));  
            }  
        }  

        response.sendRedirect(request.getContextPath() + "/index.jsp?flag='成功!'");  
    } catch (Exception e) {  
        e.printStackTrace();  
    }  

}  
public void doPost(HttpServletRequest request, HttpServletResponse response)  
        throws ServletException, IOException {  
    doGet(request, response);  
}  
public void init() throws ServletException {  
    //itemManager= new ItemManagerImpl();  
    uploadPath = new File(getServletContext().getRealPath("upload"));  
    System.out.println("uploadPath=====" + uploadPath);  
    //如果目錄不存在  
    if (!uploadPath.exists()) {  
            //創建目錄  
        uploadPath.mkdir();  
    }  

    //臨時目錄  
    tempPath = new File(getServletContext().getRealPath("temp"));  
    if (!tempPath.exists()) {  
        tempPath.mkdir();  
    }  
}  

} </pre>
  這樣一個簡單的文件的上傳功能就完成了。我們還可以同事上傳多個文件,如果使用spring mvc ,他還自己封裝了更簡單的實現方法!

 本文由用戶 b77m 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!