天天看點

jsp:Commons-FileUpload元件的應用

運作環境:jdk1.7

工具:myeclipse10

核心元件:commons-fileupload-1.2.2.jar,commons-io-2.4.jar

表單内容:

<body>

<!-- 送出方式必須為post -->

<!-- 使用元件前需要在表單配置enctype屬性(multipart/form-data) 2進制傳遞方式 -->

<form  action="upload.jsp" enctype="multipart/form-data" method="post" >

<input type="text" name="username" ><br>

<input type="file" name="upload" ><br>

<input type="submit">

</form>

</body>

送出頁面:

導包清單:

<%@page import="org.apache.commons.fileupload.FileUploadBase"%>

<%@page import="java.io.File"%>

<%@page import="org.apache.commons.fileupload.FileItem"%>

<%@page import="java.util.List"%>

<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>

<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>

<%@page import="org.apache.commons.fileupload.FileItemFactory"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

腳本:

<body>

<%

//第一步定義上傳元件工廠類對象

FileItemFactory fif = new DiskFileItemFactory();

//第二步初始化核心類

ServletFileUpload sfu = new ServletFileUpload(fif);

sfu.setHeaderEncoding("UTF-8");//設定轉換使用的字元集,可以解決上傳至伺服器中文亂碼的問題

//第三步解析form表單送出的所有表單元素資料

boolean isMultipart = ServletFileUpload.isMultipartContent(request); //使用核心類的靜态方法判斷是否是上傳元件

if (isMultipart) {

sfu.setSizeMax(1024 * 3);//設定上傳大小為3kb,需捕抓異常

try {

//解析所有元件元素傳回FileItem類型List集合

List<FileItem> items = sfu.parseRequest(request);

if (items != null) {

for (FileItem item : items) {

//判斷是否是普通表單元素

boolean isForm = item.isFormField();

if (isForm) {

//獲得普通表單的name和值

String name = item.getFieldName(); //是getFileldName方法

String value = item.getString("UTF-8");//因為将元件資料轉化為了List,編碼格式已經變化,我們在擷取值的時候可以重新設定編碼格式,就不會造成亂碼的現象

System.out.println("name:::   " + name);

System.out.println("value:::   " + value);

} else {

//若是上傳元件,我們先得到其存放的真實路徑

String savePath = application

.getRealPath("update");

//擷取上傳檔案的名字參數

String fileName = item.getName();

//建立檔案對象,注意是反斜杠,斜杠需轉義 兩個

File file = new File(savePath + "/" + fileName);

//寫入上傳檔案,儲存在伺服器(tomcat) write方法

item.write(file);

}

}

}

//注意此處異常為FileUploadBase的靜态屬性

} catch (FileUploadBase.SizeLimitExceededException e) {

e.printStackTrace();

out.print("上傳失敗,檔案太大,全部檔案的最大限制是"+sfu.getSizeMax()+"位元組");

}

}

%>

</body>