文件上傳
導入commons-fileupload-1.2.2.jar
和commons-io-2.4.jar
1.設置jsp文件內的form表單
(1)method="post"方式提交;
(2)編碼類型enctype="multipart/form-data";
(3)文件上傳框<input type="file" name="file"/>必須設置name屬性。
2.設置servlet頁面
(1)設置request請求編碼爲"UTF-8";
(2)通過DiskFileItemFactory創建制造工廠
創建文件上傳的核心類ServletFileUpload
(3)用ServletFileUpload.isMultipartContent(request)
判斷request請求的編碼類型是否是文件上傳類型multipart/form-data
返回boolean值。
(4)獲取上傳文件的絕對路徑。
(5)如果返回值是true,也就是說是文件上傳編碼類型,
則用得到的文件上傳的核心類ServletFileUpload解析request
創建的文件上傳類名.parseRequest(request)
(6)如果獲取的集合不爲空值,則進行遍歷並且判斷遍歷的文件類型是否是普通輸入框;
若是,則用InputStream流對文件進行讀取,這是要注意瀏覽器獲取文件名的兼容性,
爲防止文件名獲取錯誤,要對得到的文件名進行substring分割,
再用FileOutputStream流和buffer方法,將文件寫入,關閉流,文件上傳成功!
upload.jsp
<form action="${pageContext.request.contextPath}/uploadFileServlet" method="post" enctype="multipart/form-data"> 用戶名:<input name="uname"/> 文件上傳:<input type="file" name="file"/> <input type="submit" value="上傳"/> </form>
uploadFileServlet.java
import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class uploadFileServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); //獲取DiskFileItemFactory DiskFileItemFactory dfactory = new DiskFileItemFactory(); //2.獲取文件上傳的核心類ServletFileUpload ServletFileUpload sfup = new ServletFileUpload(dfactory); //3判斷請求是否是multipart/form-data boolean flag = ServletFileUpload.isMultipartContent(request); //獲取上傳文件的絕對路徑 String realPath = this.getServletContext().getRealPath("files"); System.out.println(this.getServletContext()); System.out.println(realPath); if(flag){ try { //解析request List<FileItem> items = sfup.parseRequest(request); if(items!=null){ //遍歷 for (FileItem fileItem : items) { //判斷如果是普通輸入框 if(fileItem.isFormField()){ String fieldName = fileItem.getFieldName(); String value = fileItem.getString(); System.out.println(fieldName+"---"+value); }else{ //就是文件上傳input System.out.println("文件上傳開始。。"); InputStream inputStream = fileItem.getInputStream(); //獲取上傳文件的文件名 String filename = fileItem.getName(); filename=filename.substring(filename.lastIndexOf("\\")+1); System.out.println("文件名:"+filename); FileOutputStream fos = new FileOutputStream(realPath+"\\"+filename); byte[] buffer = new byte[1024]; int len = 0; while((len=inputStream.read(buffer))!=-1){ fos.write(buffer, 0, len); } inputStream.close(); fos.close(); System.out.println("文件上傳成功!"); } } } } catch (FileUploadException e) { e.printStackTrace(); } } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }