標籤:epo 提交 臨時檔案 工廠 path etc 儲存目錄 伺服器安全 web
/*檔案上傳*/(common-fileupload)(common-fileupload是依賴於common-io這個包的)
使用Apache檔案上傳組件處理檔案上傳 /*步驟*/:
1.建立一個DiskFileFactory factory = new DiskFileFactory();
2.建立一個檔案上傳解析器
1 DiskFileItemFactory factory = new DiskFileItemFactory();2 //方法用於設定當上傳檔案尺寸大於setSizeThreshold方法設定的臨界值時,將檔案以臨時檔案形式儲存在磁碟上的存放目錄。3 //有一個對應的獲得臨時檔案夾的 File getRespository() 方法。4 factory.setRepository(new File(this.getServletContext().getRealPath("/WEB-INF/temp")));5 6 ServletFileUpload upload = new ServletFileUpload(factory);
3.判斷提交上來的資料是否是上傳表單的資料
1 if(!upload.isMultipartContent(request)){2 //按照傳統方式擷取資料3 return;4 }
4.使用ServletFileUpload 解析器解析上傳資料,解析結果返回的是一個List<FileItem>集合,每一個FileItem對應一個Form表單的輸入項
1 List<FileItem> list = upload.parseRequest(request);2 for(FileItem item : list){3 if(item.isFormField()){
檔案上傳功能有許多需要注意的 /*小細節*/問題,以下列出的幾點需要特別注意的
0.form表單中 加上 enctype="multipart/form-data",聲明上傳位元據
1.為保證伺服器安全,上傳檔案應該放在外界無法直接存取的目錄表,比如放於WEB-INF目錄下
2.為防止檔案覆蓋的現象發生,要為上傳檔案產生一個唯一的檔案名稱
3.為防止一個目錄下面出現太多檔案,要使用hash演算法打散儲存
4.要限制上傳檔案的最大值
5.要先回上傳檔案的類型,在收到上傳檔案名稱時,判斷尾碼名是否合法
6.想確保臨時檔案(當上傳檔案大小超過工廠設定的緩衝區大小時(不設定預設10KB))刪除,一定要在處理完上傳檔案後,調用item.delete方法
7.監聽檔案上傳進度
8.在web頁面中動態添加檔案上傳輸入項
/*檔案下載*/
1.在JSP頁面提供下載的檔案資源
2.實現檔案下載
/*如何找到雜湊打散後的對應檔案*/
/*雜湊打散後,檔案名稱不會發生變化 依舊是UUID + 檔案名稱 在處理下載的Servlet中,
同樣用Hash打散的方法,通過要下載的唯一檔案名(UUID+檔案名稱),和儲存要下載檔案的根目錄,得到要下載的檔案的儲存目錄*/
17.檔案上傳、下載