運作環境: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>