一:
上传文件需要满足以下条件:
1、enctype="multipart/form-data" 方法为post。
2:servlet需要注解:@MultipartConfig。
3:<input name="f" type="file"> file类型的input标签。
4:servlet通过part获取上传流,通过String name=part.getHeader("Content-Disposition")来获取文件名字。
5:通过commons.io来进行文件拷贝。
代码:
前端:
1 <html> 2 <head> 3 <title>$Title$</title> 4 </head> 5 <body> 6 <form action="/upload" method="post" enctype="multipart/form-data"> 7 姓名:<input name="username"><br> 8 picture:<input name="f" type="file"><br> 9 <input type="submit"><br> 10 11 </form> 12 </body> 13 </html>
后端:
1 package jd.com.upload; 2 3 4 5 import org.apache.commons.io.IOUtils; 6 7 import javax.servlet.ServletException; 8 import javax.servlet.annotation.MultipartConfig; 9 import javax.servlet.annotation.WebServlet; 10 import javax.servlet.http.HttpServlet; 11 import javax.servlet.http.HttpServletRequest; 12 import javax.servlet.http.HttpServletResponse; 13 import javax.servlet.http.Part; 14 import java.io.FileOutputStream; 15 import java.io.IOException; 16 import java.io.InputStream; 17 import java.io.OutputStream; 18 19 @WebServlet(name = "ServletUpload",urlPatterns = "/upload") 20 @MultipartConfig 21 public class ServletUpload extends HttpServlet { 22 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 23 request.setCharacterEncoding("utf-8"); 24 String username=request.getParameter("username"); 25 System.out.println(username); 26 Part part=request.getPart("f"); 27 String name=part.getHeader("Content-Disposition"); 28 //获取文件名字 29 name=name.substring(name.indexOf("filename")+10,name.length()-1); 30 System.out.println(name); 31 InputStream inp=part.getInputStream(); 32 System.out.println(inp); 33 OutputStream outp=new FileOutputStream("D:\upload\"+name); 34 //文件IO流拷贝。 35 IOUtils.copy(inp,outp); 36 inp.close(); 37 outp.close(); 38 39 } 40 41 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 42 43 } 44 }
其中在post过程中:Content-Disposition字段对应有上传文件名字。