zoukankan      html  css  js  c++  java
  • 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 请求允许的最大值。

      

      

      

  • 相关阅读:
    在IDEA通过Maven构建Scala项目
    6.Pair RDD操作
    5.RDD的Action操作和持久化persist()
    29.Spark SQL发展史
    AirFlow初始化的时候遇到 Global variable explicit_defaults_for_timestamp needs to be on (1) for mysql
    4.RDD操作之Transform
    3.RDD详解和创建RDD方式
    28.Spark中action的介绍
    2.Spark 2.x 集群部署和测试
    Repeater分页
  • 原文地址:https://www.cnblogs.com/luxh/p/2548565.html
Copyright © 2011-2022 走看看