这个是Servlet3新增加的特性,可以直接上传文件
需要注意一下几点
1.在servlet上加上注释@MultipartConfig修饰
2.request通过getPart(String name)获得文件上传的Field,name指jsp中<input type="file" name="fileName"/>的fileName
3.jsp页面中的含有文件的表单要附加一项 enctype="form-data"
jsp页面
<form action="${pageContext.request.contextPath }/servlet/UploadServlet" method="post" enctype="multipart/form-data">
保存为文件名:<input type="text" name="filename"/>
文件:<input type="file" name="file"/>
<input type="submit" value="上传文件"/>
</form>
servlet类
@WebServlet("/servlet/UploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter pw=response.getWriter();
String name=request.getParameter("filename");
Part part=request.getPart("file");
pw.println("类型:"+part.getContentType());
pw.println("大小:"+part.getSize());
pw.println("获取文件上传域的header name和value:");
Collection<String>collection=part.getHeaderNames();
for(String head:collection){
pw.println(head+":"+part.getHeader(head));
}
//获取原始文件名
String con=part.getHeader("content-disposition");
String oldname=con.substring(con.lastIndexOf("\\")+1);
pw.println("oldName:"+oldname);
part.write(getServletContext().getRealPath("/uploadFiles")+"/"+name);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}