1. Fileitem接口java
FileItem是一個接口,處理表單內容以及文件內容的的方法。在應用過程當中,每個表單中的單個字段袁術,都會被封裝成一個FileItme類的對象,經過調用FileItem對象的相關方法能夠獲得相關表單字段元素的數據。數據庫
FileItem經常使用接口apache
方法 | 返回類型 | 說明 |
getFieldName() | String | 返回表單字段元素NAME屬性值 |
isFormField() | boolean | 判斷FileItem封裝的數據是屬於普通表單字段仍是文件表單字段瀏覽器 普通字段:true;jsp 文件表單字段:false;post |
getName() | String | 返回上傳文件字段中的文件名,文件名一般是不含路徑信息的,取決於瀏覽器 |
write(File file) | void | 將FileItem對象中的惡內容保存到指定的文件中 |
getString(String encoding) | String | 按照指定編碼格式將內容轉換成字符串返回 |
2.FileIteFactory接口與DiskFileItemFactory類ui
FileItemFactroy是一個接口,用於構建FileItem實例工廠。編碼
DiskFileItemFactroy類是FileItemFactory接口的實現類,在使用過程當中,能夠使用DiskFileItemFactory構造一個FileItemFactory接口類型實例:spa
FileItemFactory factory =new DiskFileItemFactory();code
3.ServletFileUpload類
ServletFileUpload類是Apache文件上傳組件中,用於處理文件上傳的一個核心類。它的做用是以List形式返回每個被封裝成FileItem類型的表單元素集合。
ServletFileUpload類的構造語法:
public ServletFileUpload(FileItemFactory fileitemFactory)
ServletFileUpload 經常使用方法
方法 | 返回類型 | 說明 |
isMultpartContent(HttpServletRequest request) | boolean | 靜態方法 ,用去判斷請求數據中的內容是否multipart/from-data |
parseRequest(HttpServletRequest request) | List | 將請求數據中的每個字段,單獨封裝成FileItem對象,並以集合方式返回 |
1.複製Commons-io-2.4.jar,commons-fileupload-1.2.2.jar兩個包到WEB-INT/lib下,Buil path引用兩個包。
表單<From>標籤中
action="<%request.getcontextpath() %>jsp/adimn/daAdd.jsp" method="post" enctype="multype/form-data"
//action提交地址...enctype="multipart/form-data"表示明確表單提交時採用二進制進行數據傳輸,簡單說就是表單提交時能夠多部份內容進行提交,多是普通表單,也多是包含文件表單
設置上傳文件標籤
<input type="file" name="picpath" value=""/>
//導入相關的包
<%@page import="java.io.*,java.util.*,org.apache.commons.fileupload.*" %>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory" %>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %>
boolean bRet = false;
boolean bUpload = false; String uploadFileName = ""; String fieldName = ""; News news = new News();//實例化封裝屬性的News對象 news.setCreatedate(new Date());//新聞建立時間 //讀取request請求,判斷是否 是多部分表達提交(二進制進行數據傳輸,多是普通表單,也多是包含文件表單) boolean isMultipart=ServletFileUpload.isMultipartContent(request); //得到文件夾的位置(上傳的圖片保存在該文件夾中) String uploadFilePath = request.getSession().getServletContext().getRealPath("/upload/" ); if (isMultipart == true) { //建立FileItemFactory實例 FileItemFactory factory = new DiskFileItemFactory(); //建立ServletFileUpload實例 ServletFileUpload upload = new ServletFileUpload(factory); try { //解析Request請求中的數據(返回一個集合)獲取客戶端提交過來的全部表單元素 List<FileItem> items = upload.parseRequest(request); for(FileItem item:items){ //判斷表單元素類型,true爲普通表單元素,false爲文件 if (item.isFormField()){ //獲取表單元素名字 fieldName = item.getFieldName(); //若是表單元素名字爲title(判斷元素 名稱 與表單元素的對應關係) if (fieldName.equals("title")){ //設置編碼爲UTF-8 news.setTitle(item.getString("UTF-8")); }else if(fieldName.equals("id")){ String id = item.getString(); if (id != null && !id.equals("")){ //轉換爲Int類型 news.setId(Integer.parseInt(id)); } }else if (fieldName.equals("categoryId")){ news.setCateforyId(Integer.parseInt(item.getString())); }else if (fieldName.equals("summary")){ news.setSummary(item.getString("UTF-8")); }else if (fieldName.equals("newscontent")){ news.setContent(item.getString("UTF-8")); }else if(fieldName.equals("author")){ news.setAuthor(item.getString("UTF-8")); } }else{ //讀取文件元素的名稱 String fileName = item.getName(); if (fileName != null && !fileName.equals("")) { //獲取上傳文件的名稱,並經過名稱建立一個新File實例 File fullFile = new File(item.getName()); //從路徑中提取文件自己名稱,並構建一個新的file實例 File saveFile = new File(uploadFilePath, fullFile.getName()); //寫入文件,開始 上傳 item.write(saveFile); //獲取上傳文件名稱 uploadFileName = fullFile.getName(); //新聞對象中保存上傳文件名稱 news.setPicpath(uploadFileName); //上傳圖片 bUpload = true; } } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("上傳成功後的文件名是::"+news.getPicpath()); //調用後臺方法,將新聞信息插入數據庫 bRet=newsService.addNews(news); %> <% if (bRet) { //新聞添加成功跳轉新聞列表頁 response.sendRedirect("newsDetailList.jsp"); } else { //失敗跳轉到新聞添加的頁面 response.sendRedirect("newsDetailCreate.jsp"); } %>