Servlet3.0实现单文件上传
在servlet3.0中HttpServletRequest增加了对文件上传的支持
Part getPart(String name);根据名称来获取文件的上传域。
每个Part对象对应于一个文件上传域,可以通过Part对象方法来获取上传文件的文件类型和大小等属性,和write()方法将上传文件写入服务器磁盘.
上传文件页面 upload.jsp
<%@ page language="java" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>文件上传</title> </head> <body> <form action="upload" method="post" enctype="multipart/form-data" > 文件名:<input type="text" name="name" /><br/> 文件选择<input type="file" id="file" name="file" /><br/> <input type="submit" value="上传" /> </form> </body> </html>
该上传页面设置enctype="multipart/form-data",表明该表单可以用于上传文件
处理文件上传的Servlet UploadServlet.java
package uploadFile; import java.io.IOException; import java.io.PrintWriter; import java.util.Collection; import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; /** * Servlet implementation class UploadServelt */ @WebServlet(name = "upload", urlPatterns = { "/upload" }) @MultipartConfig /* * 表示该 Servlet 希望处理的请求的 MIME 类型是 multipart/form-data;也就是文件类型 */ public class UploadServelt extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public UploadServelt() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse * response) */ protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html,charset=GBK"); PrintWriter out = response.getWriter(); request.setCharacterEncoding("GBK"); String name = request.getParameter("name"); out.println("FileName: " + name + "</br>"); Part part = request.getPart("file");// 获取文件上传域 out.println("FileType :" + part.getContentType() + "</br>"); Collection<String> headerNames = part.getHeaderNames(); for (String headerName : headerNames) { out.println(headerName + "-->" + part.getHeader(headerName) + "<br/>"); } String fileNameInfo = part.getHeader("content-disposition"); String fileName = fileNameInfo.substring(fileNameInfo.indexOf("filename=\"") + 10, fileNameInfo.length() - 1); // 将上传的文件写入服务器 part.write(getServletContext().getRealPath("/uploadFile") + "/" + fileName); } }
记得在web应用的根目录下新建uploadFile文件夹
运行结果:
点击上传后
然后查看web应用下的uploadFile可以发现刚才上传的图片已经保存在该文件夹
这种方法更加简单的进行java web的开发