在Servlet3.0中,新增了Part()接口,可以方便的进行文件上传处理。
@MultipartConfig标注可用来设置Servlet处理上传文件的相关信息,否则getPart()得到的结果将为null.
调用getPart()时要指定名称获得对应的Part对象,multipart/form-data发送的每个内容区段,都会有以下的标头信息:
Content-Disposition:form-data;name=“filename”; filename="caterpillar.jpg"
Content-Type: image/jpeg
@WebServlet("/ServletDemo")
@MultipartConfig //使用MultipartConfig注解标注改servlet能够接受文件上传的请求
public class ServletDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
Part part = request.getPart("myfile");
String header = part.getHeader("content-disposition");
System.out.println(header);
String suffix = header.substring(header.lastIndexOf("."), header.length() - 1);
String realpath = getServletContext().getRealPath("upload");
File file = new File(realpath);
if(!file.exists()){
file.mkdirs();
}
part.write(realpath+"/"+System.currentTimeMillis()+suffix);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
前端页面:
<body>
<form action="/ServletDemo" method="post" enctype="multipart/form-data">
<input type="file" name="myfile">
<input type="submit" value="上传文件">
</form>
</body>
多文件上传:
@WebServlet("/ServletDemo3")
@MultipartConfig //使用MultipartConfig注解标注改servlet能够接受文件上传的请求
public class ServletDemo3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
Collection<Part> parts = request.getParts();
for (Part part : parts) {
String header = part.getHeader("content-disposition");
System.out.println(header);
String suffix = header.substring(header.lastIndexOf("."),header.length()-1);
String filename = System.currentTimeMillis()+suffix;
String realpath = getServletContext().getRealPath("upload");
File file = new File(realpath);
if (!file.exists()) {
file.mkdirs();
}
part.write(realpath+"/"+filename);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
前端页面:
<body>
<form action="/ServletDemo3" method="post" enctype="multipart/form-data">
<input type="file" name="myfile1">
<input type="file" name="myfile2">
<input type="file" name="myfile3">
<input type="file" name="myfile4">
<input type="submit" value="上传文件">
</form>
</body>