如下圖
表單的enctype分為三種
- application/x-www-form-urlencoded
- multipart/form-data
- text/plain
預設是第一種編碼
第二種編碼在需要上傳檔案時使用
第三種是不對特殊字元進行邊碼
詳情的說明可以去查form的enctype屬性
再來要接收multipart/form-data時,servlet需要定義xml或用annotation定義
主要的屬性有:
- location: 上傳之表單資料與檔案暫時存放在Server端之路徑。
- fileSizeThreshold: 檔案的大小臨界值,超過的話檔案會被寫入上傳文件裡
- maxFileSize: 上傳單一檔案之長度限制
- maxRequestSize: 上傳所有檔案之總長度限制
3跟4的屬性預設是-1,表示不設限制
我習慣是用annotation定義,如下圖
最後你可以用
Part part = request.getPart("image");
或是
Collection<Part> parts = request.getParts();
來獲得part物件處理上傳的檔案資料
part物件可以使用getSize()與getInputStream()這些方法將圖片寫入資料庫
或是使用write()將資料寫入資料庫
詳細的方法文件請詳見java文件的java.servlet.http.part這隻class
以下是我將多張圖片寫入資料庫的程式片段
最後將list傳進dao裡呼叫資料庫就能進行多張圖片的存取