Servlet文件上传||@MultipartConfig标注属性

13 篇文章 0 订阅
在Servlet3.0之前,处理上传文件的操作一直是让开发者头疼的问题,因为Servlet本身没有对此提供直接的支持,需要使用第三方框架来实现,而且使用起来也不够简单。
Servlet3.0提供了对文件上传的支持,通过@MultipartConfig标注和HttpServletRequest的两个新方法getPart()和getParts(),开发者能够很容易实现文件的上传操作。

@MultipartConfig标注主要是为了辅助Servlet3.0中HttpServletRequest提供的对上传文件的支持。该标注写在Servlet类的声明之前,一表示该Servlet希望处理的请求时multipart/form-data类型的。另外,该标注还提供了若干属性用于简化对上传文件的处理。

@MultipartConfig标注属性

fileSizeThershold         int型      是(可选)     描述:当前数据量大于该值时,内容将被写入文件。

location               String型           是(可选)     描述:存放生成文件的地址

maxFileSize        long型             是(可选)     描述:允许上传的文件最大值,默认为-1,表示没有限制

maxRequestSize    long型         是(可选)     描述:针对 multipart/form-data 请求的最大数量,默认为-1,表示没有限制

[html]  view plain  copy
  1. <!--index.html文件部分代码-->  
  2. <form action="/HelloWorld/UpLoad" method="post" enctype="multipart/form-data">  
  3.     <input type="file" name="file">  
  4.     <input type="submit" name="upload" value="上传">  
  5. </form>  

[java]  view plain  copy
  1. /*UpLoad.java为上传文件的Servlet类*/  
  2. package javaee.servlet;  
  3. import …………  
  4. //设置访问活着调用这个Servlet的路径  
  5. @WebServlet("/UpLoad")  
  6. //说明该Servlet处理的是multipart/form-data类型的请求  
  7. @MultipartConfig  
  8. public class UpLoad extends HttpServlet{  
  9.     private static final long serialVersionUID = 1L;  
  10.     public UpLoad(){  
  11.         super();  
  12.     }  
  13.     protected void doGet(HttpServletRequest request,HttpServletResponse response)  
  14.         throws ServletException,IOException{  
  15.         this.doPost(request, response);  
  16.     }  
  17.     protected void doPost(HttpServletRequest request,HttpServletResponse response)  
  18.             throws ServletException,IOException{  
  19.         //说明输入的请求信息采用UTF-8编码方式  
  20.         request.setCharacterEncoding("utf-8");  
  21.         response.setContentType("text/html; charset=UTF-8");  
  22.         PrintWriter out = response.getWriter();  
  23.         //Servlet3.0中新引入的方法,用来处理multipart/form-data类型编码的表单  
  24.         Part part = request.getPart("file");  
  25.         //获取HTTP头信息headerInfo=(form-data; name="file" filename="文件名")  
  26.         String headerInfo = part.getHeader("content-disposition");  
  27.         //从HTTP头信息中获取文件名fileName=(文件名)  
  28.         String fileName = headerInfo.substring(headerInfo.lastIndexOf("=") + 2, headerInfo.length() - 1);  
  29.         //获得存储上传文件的文件夹路径  
  30.         String fileSavingFolder = this.getServletContext().getRealPath("/UpLoad");  
  31.         //获得存储上传文件的完整路径(文件夹路径+文件名)  
  32.         //文件夹位置固定,文件夹采用与上传文件的原始名字相同  
  33.         String fileSavingPath = fileSavingFolder + File.separator + fileName;  
  34.         //如果存储上传文件的文件夹不存在,则创建文件夹  
  35.         File f = new File(fileSavingFolder + File.separator);  
  36.         if(!f.exists()){  
  37.             f.mkdirs();  
  38.         }  
  39.         //将上传的文件内容写入服务器文件中  
  40.         part.write(fileSavingPath);  
  41.         //输出上传成功信息  
  42.         out.println("文件上传成功~!");  
  43.     }  
  44. }  

[java]  view plain  copy
  1. /DownLoadjava为下载文件的Servlet类*/  
  2. package javaee.servlet;  
  3. import …………  
  4. @WebServlet("/DownLoad")  
  5. public class DownLoad extends HttpServlet{  
  6.     private static final long serialVersionUID = 1L;  
  7.     public DownLoad(){  
  8.         super();  
  9.     }  
  10.     protected void doGet(HttpServletRequest request ,HttpServletResponse response)  
  11.             throws ServletException,IOException{  
  12.         this.doPost(request, response);  
  13.     }  
  14.     protected void doPost(HttpServletRequest request, HttpServletResponse response)  
  15.             throws ServletException,IOException{  
  16.         try{  
  17.             //服务器相对路径  
  18.             String filepath = "WEB-INF/web.xml";  
  19.             //服务器绝对路径  
  20.             String fullFilePath = getServletContext().getRealPath(filepath);  
  21.             System.out.println(fullFilePath);  
  22.             /*打开文件,创建File类型的文件对象*/  
  23.             File file = new File(fullFilePath);  
  24.             /*如果文件存在*/  
  25.             if(file.exists()){  
  26.                 System.out.println("文件存在");  
  27.                 /*获得文件名,并采用UTF-8编码方式进行编码,以解决中文问题*/  
  28.                 String filename = URLEncoder.encode(file.getName(), "UTF-8");  
  29.                 System.out.println(filename);  
  30.                 /*重置response对象*/  
  31.                 response.reset();  
  32.                 //设置文件的类型,xml文件采用text/xml类型,详见MIME类型的说明  
  33.                 response.setContentType("text/xml");  
  34.                 //设置HTTP头信息中内容  
  35.                 response.addHeader("Content-Disposition","attachment:filename=\"" + filename + "\"" );  
  36.                 //设置文件的长度  
  37.                 int fileLength = (int)file.length();  
  38.                 System.out.println(fileLength);  
  39.                 response.setContentLength(fileLength);  
  40.                 /*如果文件长度大于0*/  
  41.                 if(fileLength!=0){  
  42.                     //创建输入流  
  43.                     InputStream inStream = new FileInputStream(file);  
  44.                     byte[] buf = new byte[4096];  
  45.                     //创建输出流  
  46.                     ServletOutputStream servletOS = response.getOutputStream();  
  47.                     int readLength;  
  48.                     //读取文件内容并写到response的输出流当中  
  49.                     while(((readLength = inStream.read(buf))!=-1)){  
  50.                         servletOS.write(buf, 0, readLength);  
  51.                     }  
  52.                     //关闭输入流  
  53.                     inStream.close();  
  54.                     //刷新输出缓冲  
  55.                     servletOS.flush();  
  56.                     //关闭输出流  
  57.                     servletOS.close();  
  58.                 }  
  59.             }else {  
  60.                 System.out.println("文件不存在~!");  
  61.                 PrintWriter out = response.getWriter();  
  62.                 out.println("文件 \"" + fullFilePath + "\" 不存在");  
  63.             }  
  64.         }catch(Exception e){  
  65.             System.out.println(e);  
  66.         }  
  67.     }  
  68. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值