文件上傳在web應用中非常普遍,要在servlet/jsp環(huán)境中實現(xiàn)文件上傳功能非常容易,因為網(wǎng)上已經(jīng)有許多用java開發(fā)的組件用于文件上傳,本文以commons-fileupload組件為例,為servlet/jsp應用添加文件上傳功能。
common-fileupload組件是apache的一個開源項目之一,可以從
http://jakarta.apache.org/commons/fileupload/
下載。該組件簡單易用,可實現(xiàn)一次上傳一個或多個文件,并可限制文件大小。
下載后解壓zip包,將commons-fileupload-1.0.jar復制到tomcat的webapps\你的webapp\WEB-INF\lib\下,如果目錄不存在請自建目錄。
新建一個servlet: Upload.java用于文件上傳:
?1?import?java.io.*
;
?2?import?java.util.*
;
?3?import?javax.servlet.*
;
?4?import?javax.servlet.http.*
;
?5?import?org.apache.commons.fileupload.*
;
?6?
?7?public?class?Upload?extends
?HttpServlet?{
?8?
?9?????private?String?uploadPath?=?"C:\\upload\\";?//?用于存放上傳文件的目錄
10?????private?String?tempPath?=?"C:\\upload\\tmp\\";?//?用于存放臨時文件的目錄
11?
12?????public?void
?doPost(HttpServletRequest?request,?HttpServletResponse?response)
13?????????throws
?IOException,?ServletException
14?
????{
15?
????}
16?
}
17?
18?//當servlet收到瀏覽器發(fā)出的Post請求后,在doPost()方法中實現(xiàn)文件上傳。以下是示例代碼:
19?
20?public?void
?doPost(HttpServletRequest?request,?HttpServletResponse?response)
21?????throws
?IOException,?ServletException
22?
{
23?????try
?{
24?????????DiskFileUpload?fu?=?new
?DiskFileUpload();
25?????????//?設置最大文件尺寸,這里是4MB
26?????????fu.setSizeMax(4194304
);
27?????????//?設置緩沖區(qū)大小,這里是4kb
28?????????fu.setSizeThreshold(4096
);
29?????????//?設置臨時目錄:
30?
????????fu.setRepositoryPath(tempPath);
31?
32?????????//?得到所有的文件:
33?????????List?fileItems?=
?fu.parseRequest(request);
34?????????Iterator?i?=
?fileItems.iterator();
35?????????//?依次處理每一個文件:
36?????????while
(i.hasNext())?{
37?????????????FileItem?fi?=
?(FileItem)i.next();
38?????????????//?獲得文件名,這個文件名包括路徑:
39?????????????String?fileName?=
?fi.getName();
40?????????????if(fileName!=null
)?{
41?????????????????//
?在這里可以記錄用戶和文件信息
42?????????????????//
?
43?????????????????//?寫入文件a.txt,你也可以從fileName中提取文件名:
44?????????????????fi.write(new?File(uploadPath?+?"a.txt"
));
45?
????????????}
46?
????????}
47?????????//?跳轉(zhuǎn)到上傳成功提示頁面
48?
????}
49?????catch
(Exception?e)?{
50?????????//?可以跳轉(zhuǎn)出錯頁面
51?
????}
52?
}
53?
54?//如果要在配置文件中讀取指定的上傳文件夾,可以在init()方法中執(zhí)行:
55?
56?public?void?init()?throws
?ServletException?{
57?????uploadPath?=
?
.
58?????tempPath?=
?
.
59?????//?文件夾不存在就自動創(chuàng)建:
60?????if(!new
?File(uploadPath).isDirectory())
61?????????new
?File(uploadPath).mkdirs();
62?????if(!new
?File(tempPath).isDirectory())
63?????????new
?File(tempPath).mkdirs();
64?
}
65?
編譯該servlet,注意要指定classpath,確保包含commons-upload-1.0.jar和tomcat\common\lib\servlet-api.jar。
配置servlet,用記事本打開tomcat\webapps\你的webapp\WEB-INF\web.xml,沒有的話新建一個。典型配置如下:
??<?xml?version="1.0"?encoding="ISO-8859-1"?>?
??<!DOCTYPE?web-app
???????PUBLIC?"-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.3//EN"
??????"http://java.sun.com/dtd/web-app_2_3.dtd">?
???
??? <web-app>?
??????<servlet>?
??????????<servlet-name>Upload</servlet-name>?
?????????<servlet-class>Upload</servlet-class>?
?????</servlet>?
??
?????<servlet-mapping>?
?????????<servlet-name>Upload</servlet-name>?
?????????<url-pattern>/fileupload</url-pattern>?
?????</servlet-mapping>?
?</web-app>?
配置好servlet后,啟動tomcat,寫一個簡單的html測試:
1?<form?action="fileupload"?method="post"
2?enctype="multipart/form-data"?name="form1">
3???<input?type="file"?name="file">
4???<input?type="submit"?name="Submit"?value="upload">
5?</form>
注意action="fileupload"其中fileupload是配置servlet時指定的url-pattern。
摘自:
http://www.j2medev.com/Article/Class10/j2eeopensource/200409/62.html