Servlet3.0的文件上传

来源:互联网 发布:杭州编程培训 编辑:程序博客网 时间:2024/06/05 18:01

 

Servlet 3.0对Servlet提供了注解配置功能 ,Servlet不用mapping到web.xml文件中就可以使用

Servlet3.0对应javaee 6  , 要使用tomcat 7.X及以上才能支持

 

 

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

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

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

  上传文件的表单:

?
1
2
3
4
5
6
7
8
<formaction="UploadServlet"method="post"enctype="multipart/form-data">
        <tr>
            <td>
                <inputtype="file"name="uploadFile"><br>
                <inputtype="submit">
            </td>
        </tr>
</form>
 
表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作.
enctype="multipart/form-data"是上传二进制数据; form里面的input的值以2进制的方式传过去。
 

  处理文件上传的Servlet:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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 extendsHttpServlet {
  
    @Override
    protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response)
            throwsServletException, IOException {
          
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
          
        //存储路径 此时为(app根目录下的Files文件夹下)
        String storePath = request.getServletContext().getRealPath("/Files");
          
        Part part = request.getPart("uploadFile");
          
        //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
     */
    publicString parseFileName(String header) {
        returnheader.substring(header.lastIndexOf("=") +2, header.length() -1);
    }
  
}
 
 

  @MultipartConfig的属性都是可选的:

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

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

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

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

 
 
原创粉丝点击