使用SmartUpload組件實現文件上傳

文件上傳是作JavaWeb項目中常常使用的功能,而SmartUpload是一個可無償使用的全功能的文件上傳下載組件。雖然此組件最近不多有更新,但因爲其簡單易用,對於通常的項目來講仍是一個很好的選擇。下面以一個具體的例子來講明此組件的使用。 html

首先,將SmartUplaodjar文件放入項目的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 =
  su.getFiles().getFile(0);
 

           // 判斷是否有文件上傳,沒有選擇文件則提示用戶 

           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類,這個類的主要方法以下:

1saveAs做用:將文件換名另存。

原型:

public void
saveAs(java.lang.StringdestFilePathName)

public void
saveAs(java.lang.StringdestFilePathName, intoptionSaveAs)

其中,destFilePathName是另存的文件名,optionSaveAs是另存的選項,該選項有三個值,分別是SAVEAS_PHYSICAL,SAVEAS_VIRTUALSAVEAS_AUTOSAVEAS_PHYSICAL代表以操做系統的根目錄爲文件根目錄另存文件,SAVEAS_VIRTUAL代表以Web應用程序的根目錄爲文件根目錄另存文件,SAVEAS_AUTO則表示讓組件決定,當Web應用程序的根目錄存在另存文件的目錄時,它會選擇SAVEAS_VIRTUAL,不然會選擇SAVEAS_PHYSICAL

2isMissing

做用:這個方法用於判斷用戶是否選擇了文件,也即對應的表單項是否有值。選擇了文件時,它返回false。未選文件時,它返回true

原型:publicbooleanisMissing()

3getFieldName

做用:取HTML表單中對應於此上傳文件的表單項的名字。

原型:public String getFieldName()

4getFileName

做用:取文件名(不含目錄信息)

原型:public String getFileName()

5getFilePathName

做用:取文件全名(帶目錄)

原型:public String getFilePathName

6getFileExt

做用:取文件擴展名(後綴)

原型:public String getFileExt()

7getSize

做用:取文件長度(以字節計)

原型:publicintgetSize()

8getBinaryData

做用:取文件數據中指定位移處的一個字節,用於檢測文件等處理。

原型:public byte getBinaryData(int index)。其中,index表示位移,其值在0getSize()-1之間。

上傳效果以下:

 

固然,此例只實現了單文件的處理,若是須要多文件上傳只須要在表單中提供多個文件域,並在servlet中循環處理便可。本文中提到的jspSmartupload組件能夠在網上進行下載,資源比較多此處再也不提供下載地址。

做者:中軟卓越天津ETC

相關文章
相關標籤/搜索