每日一得

          不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開發
          最近關心的內容:SSH,seam,flex,敏捷,TDD
          本站的官方站點是:顛覆軟件

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            220 隨筆 :: 9 文章 :: 421 評論 :: 0 Trackbacks

          key words: jsp文件上傳 上傳組件 Rrilly-Cos? jspsmartUpload? Jakarta Apache Struts upload


          幾種上傳方法介紹、比較

          目 錄

          1 引言... 1

          2 O`Rrilly-Cos. 1

          3 jspsmartUpload. 3

          4 Jakarta Apache Struts upload. 5

          5 幾種方法的比較... 6

          1 引言

          一個網站總是不可避免的要和用戶進行信息的交互,倘若是從窗體傳送一般的簡單輸入類型(例如:text、password、radio、 checkbox、select等等)的信息到服務器端時,只要使用application/x-www-form-urlencoded的編碼方式用 session傳遞就可以了。但是當涉及到和用戶之間的文件交換(包括上傳和下載)時,就不是那么簡單了。在上傳文件到服務器時,必須要使用 multipart/form-data的編碼方式,并且不能直接使用request.getParameter()來取得。至于所使用的方法有很多種, 比如:jspsmart公司的jspsmartupload組件,O`Rrilly公司的cos組件,Jakarta Apache公司的commonsFileUpload組件,JavaZoom的uploadbean組件,還有Struts組件中自帶的 org.apache.struts.upload類工具等等。下面就針對其中的三種解決方案(jspsmartupload、O`Reilly- cos、struts.upload)做一個簡單的介紹和對比。

          2 O`Rrilly-Cos

          Cos組件是O`Rrilly公司開發的,該組件免費,不定期增加新功能,開源。

          圖1 O`Rrilly-Cos

          在Cos組件中,MultipartRequest類主要負責文件上傳的處理。MultipartRequest有8個構造函數:

          1.Public MultipartRequest ( HttpServletRequest request, String saveDirectory,) throws IOException

          2.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize) throws IOException

          3.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, FileRenamePolicy policy) throws IOException

          4.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding) throws IOException

          5.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding, FileRenamePolicy policy) throws IOException

          6.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, String encoding) throws IOException

          7.Public MultipartRequest ( HttpServletRequest request, String saveDirectory) throws IOException

          8.Public MultipartRequest ( HttpServletRequest request, String saveDirectory, int maxPostSize) throws IOException

          前6種構造函數都是用來專門處理HTTP協議的,saveDirectory是上傳文件要存儲在服務器端的目錄名稱;maxPostSize是用來 限制用戶上傳文件大小的,若超過maxPostSzie,會產生IOException,默認上傳文件大小是1MB;encoding可以設定用何種編碼 方式來上傳文件名稱,可以解決中文問題。

          MultipartRequest類工具有8種方法,利用這些方法,我們可以取得請求的相關信息:

          Public Enumeration getParameterNames()

          可以取得請求參數的名稱

          public String getParameter(String name)

          此方法傳回參數為name的值

          public String[] getParameterValues(String name)

          此方法主要用在取得當一指定參數具有多個值時,它會傳回String的數組

          public Enumeration getFileName()

          傳回所有文件輸入類型的名稱

          public String getFilesystemNames(String name)

          用此方法得到上傳文件的真正的文件名,這里的name指文件輸入類型的名稱

          public String getContentType(String name)

          此方法得到上傳文件的內容類型

          public File getFile(String name)

          此方法得到一個文件對象,代表儲存在服務器上的name文件

          public String getOriginalFileName(String name)

          返回文件在修改政策有效之前的文件名

          3 jspsmartUpload

          Jspsmartupload組件是由jspsmart公司開發的,安裝好它的組件以后,就可以處理文件上傳及下載的問題。該組件簡單好用,免費,但是源碼不公開。

          Jspsmartupload Overview:

          Free 免費的

          upload 1or more files to the server 可上傳1個或多個文件

          upload to a database 上傳文件到數據庫

          control the upload file by file 可以一列一列的(一個個)控制上傳

          manage mixed forms files +form fields 可以管理表格文件和表格域

          download a file 可以實現文件下載

          download a database field 可以從數據庫中下載

          restrict file size , extension etc 可以限制上傳文件的尺寸和類型

          MacBinary support MckBinary的支持

          Platform: Apache, NT, Unix, Linux, IIS 可以在多種平臺上運行

          Database : MySQL , Oracle…… 支持多種數據庫(最支持MySQL)

          整個jspsmartupload壓縮包113K,包括有范例、API說明和編譯好的class文件,調用這些class文件就可以實習文件的上傳下載功能。

          圖2 jspsmartUpoad

          Jspsmartupload能實現比O`Rrilly-Cos更多的方法,比如有:

          1.public int getSize()方法得到上傳文件大小的總和

          2.public void setDeniedFilesList(String deniedFilesList)方法設定用戶不可上傳的類型

          3.public void setAllowedFilesList(String allowedFilesList)方法設定用戶可上傳的文件類型

          4.public void setTotalMaxFileSize(Long totalMaxFilesList)設定一次上傳文件大小總和

          5.public int getCount()得到Files中的文件個數

          6.public Boolean isMissing()測試文件是否確實已經存在

          7.public String getFieldName()得到此File在前一個HTML文件中的表格名稱

          8.public String getFilePathName()得到此File在上傳端的文件位置

          9.public String getFileExt()得到文件的擴展名

          ………….

          Jspsmartupload的安裝:只需把這些class文件拷貝到classes文件夾中即可。

          4 Jakarta Apache Struts upload

          由于本項目是用Struts結構開發的,所以利用Struts自帶的類工具實現上傳,這能和工程整體結合的很好,不需要導入其他的包,并且功能強大,使用簡單,性能穩定且開源,所以無疑是最佳的選擇。

          下圖是Struts中upload包的結構。基本上要實現上傳功能,只要用到FormFiles和MultipartRequestHandler接口就可以解決了。

          圖3 Struts-upload包的結構

          基本處理流程是,從頁面中傳遞文件到Form中,然后從Action得到Form中的文件,形成InputStream,然后通過OutputStream寫入磁盤。

          同樣,Struts的upload工具類也可以實現對上傳文件大小和類型的控制,可以同時上傳多個文件等等。

          5 幾種方法的比較

          O`Rrilly-Cos

          jspsmartUpload

          Struts-upload

          是否開源

          是否免費

          是否繼續開發

          不明

          功能

          一般

          可靠性

          一般

          特點綜述

          免費,開源,不定期增加新功能,可靠性高,代碼直接寫在jsp文件中

          簡單好用,可上傳、下載,功能強大,免費,但是源碼不公開,代碼直接寫在jsp文件中。上傳時,文件先預讀入內存,當接到save指令時才保存到磁盤,所以上傳的性能和文件及內存的大小關系密切。

          在Struts中使用極為方便,免費,開源,可靠性高,表示層和業務層分離,有后臺的Form和Action

          表1 幾種上傳方法的比較

          在研究比較這幾種上傳組件之后,我認為不管用其中的哪一種都能滿足我們的要求,畢竟我們要實現的僅僅是文件上傳的功能。最基本的,只要能將文件取得File格式的,就能實現各種各樣的功能。

          結論是,就本項目而言,使用Struts-upload組件是最貼切的選擇;如果要做封裝的話,最好選擇jspsmartUpload和O`Rrilly-Cos。

          posted on 2006-05-16 23:50 Alex 閱讀(1549) 評論(0)  編輯  收藏 所屬分類: javaweb技術
          主站蜘蛛池模板: 安顺市| 平湖市| 马山县| 镇赉县| 南岸区| 九龙坡区| 五莲县| 汝城县| 庆元县| 长子县| 阜康市| 凤山县| 南靖县| 积石山| 新龙县| 崇仁县| 建水县| 静宁县| 梅州市| 乌拉特中旗| 湾仔区| 东阿县| 剑阁县| 大姚县| 台北市| 常熟市| 赤水市| 靖州| 广平县| 内乡县| 濮阳县| 抚州市| 永修县| 安岳县| 罗定市| 大悟县| 安丘市| 常熟市| 承德县| 遵义市| 贵溪市|