當前位置:開發者網絡 >> 技術教程 >> JSP教程 >> 資料/其它 >> 內容
精彩推薦
分類最新教程
分類熱點教程
    
幾種上傳方法介紹和比較
作者:未知
日期:2004-10-12
人氣:
投稿:snow(轉貼)
來源:未知
字體:
收藏:加入瀏覽器收藏
以下正文:
幾種上傳方法介紹、比較



目 錄

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。


相關文章: