借助Servlet3.0实现更简单的文件上传

Servlet3.0以前

在Servlet3.0之前,传统的文件上传都需要借助于common-fileupload,处理起来相对比较复杂。

Servlet3.0之后

在Servlet3.0之后,Servlet3.0API为我们提供了一种更简单的文件上传。

在Servlet3.0中,HttpServletRequest增加 了对文件上传的支持,在HttpServletRequest中提供如下方式来实现文件上传:

首先,通过Part getPart(String name)来获取文件上传域,参数name则是表单中<input type="file">文件域的名字name,同样,还可以通过Collection<Part> getParts()方法来获取所有的文件上传域。

现在,来看看Part这个类中方法:

part.getContentType:通过这个方法我们获取到上传的文件的类型

part.getSize():通过这个方法获取上传的文件的大小

part.getHeaderNames():通过这个方法获取该文件上传域的HeaderName

part.getHeader(String headerName):通过这个方法获取该文件上传域headerName对应的value值

part.write(String path):通过这个方法将文件上传域的文件上传到服务器中path路径下

下面通过一个简单的demo来实例说明:

新建一个index.jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" id="file" name="file"/>
<input type="submit" value="上传"/>
</form>


</body>
</html>
接下来编写一个UploadServlet,这里我通过注解的方式注册Servlet,需要注意的是,对于处理文件上传的Servlet应该使用@MultipartConfig注解来修饰
@WebServlet(urlPatterns="/upload",name="upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
   
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out=response.getWriter();
		request.setCharacterEncoding("UTF-8");
		Part part=request.getPart("file");
		out.println(part.getContentType()+" "+part.getSize());
		String fileNameInfo=part.getHeader("content-disposition");
		String fileName=fileNameInfo.substring(fileNameInfo.indexOf("filename=\""),fileNameInfo.length()-1);
		out.println(fileName);
		String filename2=fileName.substring(fileName.lastIndexOf("\\"), fileName.length());
		part.write(getServletContext().getRealPath("/uploadFiles")
				+"/"+filename2);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}
servlet中的substring是为了获取到本地上传的文件的文件名,在web项目的根路径下新建一个uploadFiles文件夹,用以存放上上传的文件。使用write方法想服务器中传入文件。


猜你喜欢

转载自blog.csdn.net/wetsion/article/details/51675222