使用commons-fileupload元件上傳檔案
阿新 • • 發佈:2019-01-04
<%
//1、獲取一個工廠物件FileItemFactory FileItemFactory factory = new DiskFileItemFactory(); //2、獲取一個檔案上傳物件ServletFileUpload ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax(100 * 1024); try { //3、判斷表單enctype是否是檔案上傳型別isMultipartContent() if (ServletFileUpload.isMultipartContent(request)) { //由於從客戶端傳送到伺服器的表單中,既包含了普通表單域,又包含了檔案域。 //那麼我們應該先解析請求,從而獲取既包含了普通表單域,又包含了檔案域的集合 List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { //如果是普通表單域,獲取使用者名稱。然後輸出 if (item.isFormField()) { if (item.getFieldName().equals("uname")) { String uname = item.getString("UTF-8"); out.print("使用者名稱為:" + uname + ",該使用者上傳了檔案<br/>"); } } else { //檔名獲取;在IE瀏覽器裡,fileName是本地檔案路徑,例:D:/wbb/wbb.jpg String fileName = item.getName(); //判斷使用者上傳的檔案是否符合規範 List<String> suffixes = Arrays.asList("jpg", "png", "jpeg", "pneg"); //獲取檔案上傳的檔案字尾名 int atPoint = fileName.lastIndexOf(".") + 1; //獲取檔名的字尾 String suffix = fileName.substring(atPoint); if (suffixes.contains(suffix)) { //如果字尾名包含,說明:符合要求 //如果是檔案域,那麼就進行上傳 //上傳到哪裡?—— tomcat(伺服器) //上傳檔案的資料夾 ? 1、手動在webroot根目錄下建立一個空的uploads資料夾,當專案部署執行的時候,該資料夾會自動在webapps——本專案下建立, //目的是用來接收上傳的檔案 //2、File file = new File(xxx); !file.exists() ———— file.mkdirs() String filePath = request.getSession() .getServletContext() .getRealPath("uploads"); File file = new File(filePath); if (!file.exists()) { file.mkdirs(); } // 建立中轉File物件 //原因:由於在IE瀏覽器中,會將檔案的全路徑作為檔名;而在FF、Chorme中只保留檔案的名稱。所以建立中轉物件,通過該物件的getName()方法返回檔名 File tempFile = new File(fileName); //表示在filePath路徑下建立名字為tempFile.getName()的空檔案 File saveFile = new File(filePath, tempFile.getName()); //上傳!fileItem write() 寫 將檔案寫入到指定的路 徑下 item.write(saveFile); out.print("上傳檔案成功!檔案的名稱為:" + tempFile.getName() + "\t檔案的路徑為:" + filePath + "<br/>"+fileName); } else { out.print("檔案上傳失敗!檔案型別必須是\"jpg\", \"png\",\"jpeg\", \"pneg\"<br/>"); } } } } } catch (FileUploadBase.SizeLimitExceededException ex) { out.print("檔案上傳失敗!必須小於" + upload.getSizeMax() / 1024 + "kb"); } %>