自己對照別的博主的博客實現的,記錄用。
整個上傳的結構如下:
上傳的頁面:unload.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>文件上傳</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form action="<%=path %>/Servlet/UploadHandleServlet" enctype="multipart/form-data" method="post"> 上傳用戶:<input type="text" name="username"><br> 上傳文件1:<input type="file" name="file1"><br> 上傳文件2:<input type="file" name="file2"><br> <input type="submit" value="提交"> </form> </body> </html>
提示上傳信息message.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>提示消息</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> ${message} </body> </html>
處理上傳的servlet

package Servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; 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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class UploadHandleServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String savepath=this.getServletContext().getRealPath("/WEB-INF/upload"); File file=new File(savepath); System.out.println(savepath); if(!file.exists() && !file.isDirectory()) { System.out.println(savepath+"目錄不存在創建"); file.mkdir(); } String message=""; try{ System.out.println("1"); DiskFileItemFactory fctory=new DiskFileItemFactory(); ServletFileUpload fileuplaod=new ServletFileUpload(fctory); fileuplaod.setHeaderEncoding("UTF-8"); if(!ServletFileUpload.isMultipartContent(request)){ System.out.println("5"); return; } System.out.println("6"); List<FileItem> list=fileuplaod.parseRequest(request); for(FileItem item : list){ if(item.isFormField()){ System.out.println("2"); String name=item.getFieldName(); String value=item.getString("UTF-8"); System.out.println(name+"="+value); }else{ System.out.println("3"); String name=item.getName(); System.out.println(name); if(name==null||name.trim().equals("")){ continue; } name=name.substring(name.lastIndexOf("\\")+1); InputStream in=item.getInputStream(); FileOutputStream out =new FileOutputStream(savepath+"\\"+name); byte buffer[]=new byte[1024]; int len=0; while((len=in.read(buffer))>0){ out.write(buffer, 0, len);; } System.out.println("4"); in.close(); out.close(); item.delete(); message="文件上傳成功"; } } }catch(Exception e){ message="文件上傳失敗!"; e.printStackTrace(); } request.setAttribute("message", message); request.getRequestDispatcher("../message.jsp").forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }
映射:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>UploadHandleServlet</servlet-name> <servlet-class>Servlet.UploadHandleServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UploadHandleServlet</servlet-name> <url-pattern>/Servlet/UploadHandleServlet</url-pattern> </servlet-mapping> </web-app>
上傳結果:
這里需要注意:
if(!ServletFileUpload.isMultipartContent(request)){ return; }
判斷上傳的類型,在unload.jsp form表單定類型
enctype="multipart/form-data"
file1和file2是在獲取上傳文件的名字是出錯了才出現的結果,getFiledName獲取普通輸入項,如上傳的用戶名, getName獲取上傳的文件名稱
String name=item.getFieldName();