1. 程式人生 > >18.檔案的上傳和下載

18.檔案的上傳和下載

1.熟悉各種表單域

常用的表單標籤:

通常使用<input>標籤向伺服器端提交資料<input>標籤常用型別有9種類型text:文字域password:密碼文字域radio:單選按鈕checkbox:多選按鈕file:檔案上傳hidden:隱藏域reset:重置按鈕submit:提交按鈕button:按鈕

其他常用表單標籤<textarea name=“" rows=“3” cols=“3”>多行文字</textarea><select name="i_select"> <option value="1" >第一項</option> <option value="2" >第二項</option> <option value="3" >第三項</option></select>

觀察實驗中示例,通常表單域的值都是value值,在伺服器端使用request.getParameter("name")取得幾個較特殊的標籤<textarea>這裡是該標籤的值</textarea><select name="i_select"> <option value=“值" >第一項</option></select><input type="checkbox" />如果沒有value,預設選中為"on",否則為null如果有value值,選中的值為其value值使用request.getParameterValues()方法得到值的字串陣列<input type="radio">一組radio的名字相同,value要設定且不同檔案提交<input type="file" />

2.檔案上傳

 檔案域

表單中檔案輸入型別允許將客戶端計算機內的檔案上傳至伺服器端<form action="…" enctype="multipart/form-data"> <input type="file" name="upfile" /> <input type="submit" /></form>檔案輸入域的屬性accept: 設定使用者能夠上傳檔案之MIME型別size: 檔案輸入欄位的大小name: 檔案輸入欄位的名稱value: 預設的檔名稱maxlength: 檔名稱最大長度限制

文字型別資料(如:Text、Select等)傳送資料到伺服器端時,使用的編碼方式為:enctype="application/x-www-form-urlencoded"若要傳送檔案至伺服器端,必須使用enctype="multipart/form-data"由於在傳送資料時所使用的編碼方式不同,因此在接收客戶端傳來的檔案資料時,不能直接使用request.getParameter()方法

使用request.getInputStream方法可以獲得客戶端瀏覽器POST方式傳來的資料流,但得到的資料流還包括一些其他資訊

getServletContext().getRealPath()方法取得伺服器端某檔案的實際路徑

JSPSmartUpload:

是一套免費的元件,簡單好用,但官方網站已經關閉,且沒有原始碼

示例

步驟

建立SmartUpload物件

初始化SmartUpload物件

根據Form的內容上傳

儲存檔案到伺服器端

JSPSmartUpload主要功能:

使用setMaxFileSize()限制上傳檔案大小getFiles()得到多個上傳檔案setAllowedFilesList來限制上傳檔案型別

還可以進行檔案下載的操作

O'Reilly cos元件:

O'reilly公司提供的cos元件,可免費下載且有原始碼,會定期更新功能下載地址:http://www.servlets.com/cos/index.html示例建立MultipartRequest物件在構造方法中傳入request、檔案存放路徑、檔名的編碼方式通過MultipartRequest.getFileNames()得到上傳檔案的反饋資訊

Apache commons-fileupload:

commons-fileupload是目前JavaWeb應用最廣泛的上傳元件commons-fileupload元件需要有commons-io元件的支援示例步驟建立DiskFileItemFactory使用factory建立一個ServletFileUpload使用parseRequest方法解析request得到FileItem列表用FileItem的write方法寫到一個目標檔案中(自己起檔名)

檔案上傳思考:

多檔案上傳伺服器端的路徑及名稱要考慮限制上傳檔案大小檔名中文問題表單裡同時有普通域也有檔案域上傳進度條

3.檔案下載:

HttpResponse物件實現檔案下載確定下載檔案的地址(路徑)response設定響應的內容型別response設定響應頭資訊讀取檔案通過response以檔案流的形式響應給客戶端

複習常用的表單域檔案上傳O’reilly cos外掛Apache common-fileupload 外掛檔案下載Response以流的方式將檔案響應給客戶端

實驗檔案上傳頭像上傳多檔案上傳文字域、檔案域混合提交檔案下載頁面提交檔名下載指定檔案