Servlet3.0-文件上传

  Servlet3.0提供了对文件上传的原生支持。

  使用注解@MultipartConfig将一个Servlet标识为支持文件上传。

  Servlet3.0将multipart/form-data的POST请求封装成Part,通过Part对上传的文件进行操作。

  上传文件的表单:

<form action="UploadServlet" method="post" enctype="multipart/form-data">
   		<tr>
   			<td>
   				<input type="file" name="file"><br>
   				<input type="submit">
   			</td>
   		</tr>
</form>

  处理文件上传的Servlet:

package com.cndatacom.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

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;

@WebServlet(name="UploadServlet",urlPatterns="/UploadServlet")
@MultipartConfig//标识Servlet支持文件上传
public class UploadServlet extends HttpServlet {

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		//存储路径
		String storePath = request.getServletContext().getRealPath("/uploadFile");
		
		Part part = request.getPart("file");
		
		//Servlet3没有提供直接获取文件名的方法,需要从请求头中解析出来
		//获取请求头
		String header = part.getHeader("content-disposition");
		//获取文件名
		String fileName = parseFileName(header);
		
		//把文件写到指定路径
		part.write(storePath+File.separator+fileName);
		
		PrintWriter out = response.getWriter();
		out.println("上传成功");
		out.flush();
		out.close();
	}
	
	/**
	 * 根据请求头解析出文件名
	 * 请求头的格式:form-data; name="file"; filename="a.txt"
	 * @param header
	 * @return
	 */
	public String parseFileName(String header) {
		return header.substring(header.lastIndexOf("=") + 2, header.length() - 1);
	}

}

  @MultipartConfig的属性都是可选的:

  fileSizeThreshold:设置阈值,达到阈值后开始把文件写到磁盘。

  location:      设置文件的存储目录。

  maxFileSize:    允许上传文件的最大值,Byte为单位。

  maxRequestSize: multipart/form-data 请求允许的最大值。

  

  

 

  

你可能感兴趣的:(servlet3.0)