文件上傳是作JavaWeb項目中常常使用的功能,而SmartUpload是一個可無償使用的全功能的文件上傳下載組件。雖然此組件最近不多有更新,但因爲其簡單易用,對於通常的項目來講仍是一個很好的選擇。下面以一個具體的例子來講明此組件的使用。 html
首先,將SmartUplaod的jar文件放入項目的lib目錄中。 java
而後,咱們開發上傳用的JSP頁面,爲了簡單起見,本表單中僅包含了用戶上傳文件的文件域和一個上傳按鈕。效果以下:
緩存
須要注意的是,表單中使用了文件域,則表單提交類型(method)必須爲post並且添加enctype="multipart/form-data"。 dom
有了上傳頁面,下面編寫處理上傳的Servlet,代碼以下: jsp
publicclassUploadServletextendsHttpServlet { post privatestaticfinallongserialVersionUID = 1L; this protectedvoiddoPost(HttpServletRequest request, spa HttpServletResponse response) throwsServletException, IOException { 操作系統 // 對象輸出聲明 orm response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); // 準備上傳的目錄 String path = this.getServletContext().getRealPath("photo"); File fpath = new File(path); if (!fpath.exists()) { fpath.mkdir(); } // 實例化組件 SmartUploadsu = newSmartUpload("utf-8"); // 初始化組件 su.initialize(this.getServletConfig(), request, response); // 上傳限制 su.setMaxFileSize(50 * 1024); // 設置大小50K su.setAllowedFilesList("gif,png,jpg"); // 設置上傳類型 try { // 上傳文件 su.upload(); // 獲取上傳的第一個文件 SmartFile file = // 判斷是否有文件上傳,沒有選擇文件則提示用戶 if (file.isMissing()) { out.println("<script>alert('請選擇要上傳的文件!');location.href='upload.jsp';</script>"); return; } // 按照規則準備文件名按規則 String fname = new Date().getTime() + (newRandom().nextInt(900) + 100) + "." + file.getFileExt(); // 把文件從緩存區轉移到指定目錄中 file.saveAs(path + "/" + fname); out.println("<script>alert('文件上傳成功!');location.href='upload01.jsp';</script>"); } catch (SecurityException e) { e.printStackTrace(); // 違反上傳限制的異常處理 out.println("<script>alert('請選擇合法的文件!');location.href='upload01.jsp';</script>"); } catch (SmartUploadException e) { e.printStackTrace(); out.println("<script>alert('文件上傳失敗!');location.href='upload01.jsp';</script>"); } } } |
以上代碼實現了單文件上傳處理,添加了註釋方便閱讀。其中核心就是使用了SmartFile類,這個類的主要方法以下:
1、saveAs做用:將文件換名另存。
原型:
public void
saveAs(java.lang.StringdestFilePathName)
或
public void
saveAs(java.lang.StringdestFilePathName, intoptionSaveAs)
其中,destFilePathName是另存的文件名,optionSaveAs是另存的選項,該選項有三個值,分別是SAVEAS_PHYSICAL,SAVEAS_VIRTUAL,SAVEAS_AUTO。SAVEAS_PHYSICAL代表以操做系統的根目錄爲文件根目錄另存文件,SAVEAS_VIRTUAL代表以Web應用程序的根目錄爲文件根目錄另存文件,SAVEAS_AUTO則表示讓組件決定,當Web應用程序的根目錄存在另存文件的目錄時,它會選擇SAVEAS_VIRTUAL,不然會選擇SAVEAS_PHYSICAL。
2、isMissing
做用:這個方法用於判斷用戶是否選擇了文件,也即對應的表單項是否有值。選擇了文件時,它返回false。未選文件時,它返回true。
原型:publicbooleanisMissing()
3、getFieldName
做用:取HTML表單中對應於此上傳文件的表單項的名字。
原型:public String getFieldName()
4、getFileName
做用:取文件名(不含目錄信息)
原型:public String getFileName()
5、getFilePathName
做用:取文件全名(帶目錄)
原型:public String getFilePathName
6、getFileExt
做用:取文件擴展名(後綴)
原型:public String getFileExt()
7、getSize
做用:取文件長度(以字節計)
原型:publicintgetSize()
8、getBinaryData
做用:取文件數據中指定位移處的一個字節,用於檢測文件等處理。
原型:public byte getBinaryData(int index)。其中,index表示位移,其值在0到getSize()-1之間。
上傳效果以下:
固然,此例只實現了單文件的處理,若是須要多文件上傳只須要在表單中提供多個文件域,並在servlet中循環處理便可。本文中提到的jspSmartupload組件能夠在網上進行下載,資源比較多此處再也不提供下載地址。
做者:中軟卓越天津ETC