程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Struts2文件上傳(一) Common-FileUpload

Struts2文件上傳(一) Common-FileUpload

編輯:關於JAVA

文件上傳是許多項目都遇到的需求,Struts2中也帶有文件上傳功能,但它是利用的java領域的其他 倆個常用的文件上傳的項目:Common- FileUpload和COS,在了解Struts2之前讓我們了解下怎樣使用 Common-FileUpload來實現文件上傳以及文件上傳實現過程中應該注意的問題。

在Common- FileUpload中,它把從客戶端提交過來的表單封裝成一個個FileItem對象,這也是它實現文件上傳功能 的核心類。另一個很重要的類就是FileUploadBase,他的功能就是解析請求(request),如進行上傳文 件大小驗證,請求類型驗證(文件上傳的enctype要設置成multipart/form-data)等。我們經常用到它 的子類ServletFileUpload。在FileUploadBase解析 request的過程中會將文件保存到內存,如果文件大 小大於我們設置的緩存的大小,它將把文件的其他內容保存到一個臨時目錄,當我們對FileItem 對象實 現正真上傳時會從內存區或臨時目錄將文件保存到正真的上傳目錄。而我們要做的就是進行簡單的配置 ,可以用很少的代碼就可以實現文件上傳,而不用直接與IO流打交道。首先將文件上傳過程中應注意的 地方了解下:

1.request請求的方法一定要是POST:method="post"

2.request請求的類型 一定要是multipart/form-data: enctype="multipart/form-data"

3.在對DiskFileItemFacotry 設置過程中repository參數代表文件保存的臨時目錄,如果不設置,系統將以System.getProperty ("java.io.tmpdir")代表的目錄作為臨時目錄。

4.DiskFileItemFacotry中的sizeThreshold參數 代表保存到內存的大小,如果當個上傳文件的大小小於這個值,則這個文件會暫時保存到內存中。如果 大於這個值,則多的部分會保存到臨時目錄中。單位為B。

5.ServletFileUpload中的sizeMax參 數是代表上傳文件的總大小,單位為B

6.要對FileItem進行上傳操作,首先要判斷isFormField() 為false,因為系統將每個表單項解析成一個FileItem,這其中也包括不是文件上傳的表單項。所以要判 斷是否為文件上傳表單項。

下面用Servlet簡單的實現文件上傳:

upload.jsp

Java代碼

<body>
<form method="post"  id="uploadForm" action="UploadServlet" enctype="multipart/form-data" >
<table  style="border: 1px solid;" align="center">
<thead>
<tr>
<td style="text-align: center" colspan="2">文件上傳</td>
</tr>
</thead>
<tbody>
<tr>
<td>用戶 名:</td>
<td><input type="text"  name="user.username"></input></td>
</tr>
<tr>
<td>密碼:</td>
<td><input type="text"  name="user.password"></input></td>
</tr>
<tr>
<td colspan="2">
<input type="file" name="file1"/>
</td>
</tr>
<tr>
<td colspan="2">
<input  type="file" name="file2"/>
</td>
</tr>
<tr>
<td colspan="2">
<input type="file" name="file3"/>
</td>
</tr>
<tr>
<td><input type="button"  value="Login" id="upload"/></td>
<td><input type="button"  value="Cancel" id="cancelUpload"/></td>
</tr>
</tbody>
</table>
</form>
</body>

UploadServlet

Java代碼

protected void  doPost(HttpServletRequest request,
HttpServletResponse response) throws  ServletException, IOException {
try {
DiskFileItemFactory factory = new  DiskFileItemFactory();
// 設置臨時緩存大小,文件大於這個值的部分保存到臨時目錄
factory.setSizeThreshold(1024 * 128);
//設置文件保存臨時目錄
factory.setRepository(new File(
"C:\\Documents and Settings\\bond\\temp"));
ServletFileUpload upload = new ServletFileUpload(factory);
// 設置上傳內容大小
upload.setSizeMax(1024 * 1024*512);

List fileItems =  upload.parseRequest(request);
for (FileItem fi : fileItems) {
if (! fi.isFormField()) {
fi
.write(new File("D:\\bond\\upload", fi
.getName ()));
}
}
request.getRequestDispatcher("success.jsp").forward(request,
response);
} catch (Exception e) {
e.printStackTrace();
request.getRequestDispatcher("failure.jsp").forward(request,
response);
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved