Posted on 2007-02-06 17:19
lixw 閱讀(518)
評論(0) 編輯 收藏
一、最簡單的方式:
設置表單form 的 method=”post” ENCTYPE="multipart/form-data"
通過
InputStream in =servletRequest.getInputStream();
以流的方式處理,它的缺點就不言而喻了
二、commons-fileupload:
官方網站:[http://jakarta.apache.org/commons/fileupload/]
它提供基于Servlet的上傳,可上傳到內存、文件,且文件的上傳位置,最大上傳文件字節數可以在程序中設置,
特別是對于多文件上傳支持較好,List items = upload.parseRequest(request)就可以處理多文件,其他都不用考慮,
提供了item.isFormField()判斷是否為標準表單值的方法,簡潔實用,但是可配置仍然不好,對API的依賴性很大
使用步驟:
1、首先判斷一個HttpServletRequest是否是一個上傳文件的請求:
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
2、處理請求:
2.1、創建基于硬盤存儲的工廠
DiskFileItemFactory factory = new DiskFileItemFactory();
/* 或者
DiskFileItemFactory factory = new DiskFileItemFactory(yourMaxMemorySize, yourTempDirectory);
*/
2.2、設置工廠屬性,從而生成個性化ServletFileUpload
//設置最多只允許在內存中存儲的數據,單位:字節
factory.setSizeThreshold(yourMaxMemorySize);
// 設置一旦文件大小超過getSizeThreshold()的值時數據存放在硬盤的目錄
factory.setRepository(yourTempDirectory);
2、處理上傳文件:
Iterator iter = items.iterator();
while (iter.hasNext()) {
?? FileItem item = (FileItem) iter.next();
?? //判斷是否為標準表單域
?? if (item.isFormField()) {
??????? String name = item.getFieldName();
?String value = item.getString();
???…
??? ?} else {
??String fieldname = item.getFieldName();
??String filename = item.getName();
??String contentType = item.getContentType();
??boolean isInMemory = item.isInMemory();
??long sizeInBytes = item.getSize();
??…
?//直接從內存訪問上傳數據
?byte[] data = item.get();
???
?//采用流方式讀取上傳文件
?InputStream stream = item.openStream();
?// 保存到文件
?if (writeToFile) {
?File uploadedFile = new File(storeFilePath);
?item.write(uploadedFile);
??? } else {
?//轉換為輸出流
?InputStream uploadedStream = item.getInputStream();
?...
?uploadedStream.close();
?}
}
...
三、javazoom的UploadBean:
官方網站:[http://www.javazoom.net/jzservlets/uploadbean/uploadbean.html]
功能強大,支持上傳到文件系統,數據庫,同時它還有一些高級功能,如對上傳的監聽,overwrite過濾器、自定義解析器、
overwrite策略、黑名單、白名單等,特別是它采用了JavaBean方式,所以在JSP頁面可以輕松的采用
從而實現上傳到硬盤目錄但是它的源代碼是需要Money的,我們只能得到它的jar包和API Doc,
同時它對多文件上傳處理的不是很好(我覺得)。
官方網站上有詳細的說明供參考。
四、Jspsmartupload
官方網站:[http://www.jspsmart.com/] 可惜一直打不開
這里有一篇文章說明:[http://java.ccidnet.com/art/3737/20060717/638255_1.html]