首頁>技術>

在Web應用中,由於大多數檔案的上傳都是透過表單的形式提交給伺服器的,因此,要想在程式中實現檔案上傳的功能,首先得建立一個用於提交上傳檔案的表單頁面。需要注意的是,為了使Servlet程式可以獲取到上傳檔案的資料,需要將表單頁面的method屬性設定為post方式,enctype屬性設定為“multipart/form-data”型別,新增檔案的input標籤型別設定為file型別。示例如下:

<%--指定表單資料的 enctype 屬性以及提交方式 --%><form enctype="multipart/form-data" method="post"><%-- 指定標記的型別和普通表單的名稱 --%>使用者名稱:<input type="text" name="name"/><br/><%--指定標記的型別和檔案域的名稱--%>選擇上傳檔案:<input type="file" name="myfile"/><br/>

當瀏覽器透過表單提交上傳檔案時,由於檔案資料都附帶在HTTP請求訊息體中,並且採用MIME型別(多用途網際網路郵件擴充套件型別)進行描述。因此,瀏覽器傳送給伺服器的HTTP訊息比較特殊,具體示例如下:

multipart/form-data;boundary=----------------------------7dfa7a30650----------------------------7dfa7a30650Content-Disposition: form-data;name="name"itcast----------------------------7dfa7a30650Content-Disposition: form-data;name="myfile";filename="uploadfile.txt"Content-Type: text/plainwww.itcast.cn----------------------------7dfa7a30650--

從上面的表單請求正文可以看出,請求正文分為多個部分,解析這部分內容比較麻煩。為此,Apache組織提供了一個開源元件Commons-FileUpload,該元件可以方便地將“multipart/form-data”型別請求中的各種表單域解析出來,並實現一個或多個檔案的上傳,同時也可以限制上傳檔案的大小等內容,並且效能優異,使用極其簡單。需要注意的是,在使用FileUpload元件時,需要匯入commons-fileupload和commons-io兩個jar包。

為了大家更好地理解FileUpload元件是如何實現檔案的上傳功能,接下來,開啟FileUpload元件的幫助文件,檢視其實現方式,具體如圖6-1所示。

圖1 fileUpload類原始碼

從圖1中可以看出,FileUpload元件也是透過Servlet來實現檔案上傳功能的。其工作流程如圖2所示。

圖2 FileUpload元件實現檔案上傳的工作流程

從圖2中可以看出,實現檔案的上傳會涉及到幾個陌生類,這些類都是Apache元件上傳檔案的核心類。關於這些核心類的相關知識,將在下面的小節進行詳細講解。

課程推薦:

7
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 前端靜態資源處理之js壓縮