form表单文件上传 servlet文件接收

需要导入jar包

Upload.Jsp代码

复制代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>$title$/title>
</head>
<body>
<form method="post" action="/test/UploadServlet" enctype="multipart/form-data">
    选择一个文件:
    <input type="file" name="uploadFile" />
    <br/><br/>
    <input type="submit" value="上传" />
</form>
</body>
</html>

复制代码

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

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

import java.io.File;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.List;

  

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

  

import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

  

@WebServlet("/UploadServlet")

public class UploadServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

      

    // 上传文件存储目录

    private static final String UPLOAD_DIRECTORY = "upload";

  

    // 上传配置

    private static final int MEMORY_THRESHOLD   = 1024 1024 3;  // 3MB

    private static final int MAX_FILE_SIZE      = 1024 1024 40// 40MB

    private static final int MAX_REQUEST_SIZE   = 1024 1024 50// 50MB

  

    /**

     * 上传数据及保存文件

     */

    protected void doPost(HttpServletRequest request,

        HttpServletResponse response) throws ServletException, IOException {

        // 检测是否为多媒体上传

        if (!ServletFileUpload.isMultipartContent(request)) {

            // 如果不是则停止

            PrintWriter writer = response.getWriter();

            writer.println("Error: 表单必须包含 enctype=multipart/form-data");

            writer.flush();

            return;

        }

  

        // 配置上传参数

        DiskFileItemFactory factory = new DiskFileItemFactory();

        // 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中

        factory.setSizeThreshold(MEMORY_THRESHOLD);

        // 设置临时存储目录

        factory.setRepository(new File(System.getProperty("java.io.tmpdir")));

  

        ServletFileUpload upload = new ServletFileUpload(factory);

          

        // 设置最大文件上传值

        upload.setFileSizeMax(MAX_FILE_SIZE);

          

        // 设置最大请求值 (包含文件和表单数据)

        upload.setSizeMax(MAX_REQUEST_SIZE);

  

        // 构造临时路径来存储上传的文件

        // 这个路径相对当前应用的目录

        String uploadPath = getServletContext().getRealPath("./") + File.separator + UPLOAD_DIRECTORY;

        

          

        // 如果目录不存在则创建

        File uploadDir = new File(uploadPath);

        if (!uploadDir.exists()) {

            uploadDir.mkdir();

        }

  

        try {

            // 解析请求的内容提取文件数据

            @SuppressWarnings("unchecked")

            List<FileItem> formItems = upload.parseRequest(request);

  

            if (formItems != null && formItems.size() > 0) {

                // 迭代表单数据

                for (FileItem item : formItems) {

                    // 处理不在表单中的字段

                    if (!item.isFormField()) {

                        String fileName = new File(item.getName()).getName();

                        String filePath = uploadPath + File.separator + fileName;

                        File storeFile = new File(filePath);

                        // 在控制台输出文件的上传路径

                        System.out.println(filePath);

                        // 保存文件到硬盘

                        item.write(storeFile);

                        request.setAttribute("message",

                            "文件上传成功!");

                    }

                }

            }

        catch (Exception ex) {

            request.setAttribute("message",

                    "错误信息: " + ex.getMessage());

        }

        // 跳转到 message.jsp

        getServletContext().getRequestDispatcher("/message.jsp").forward(

                request, response);

    }

}

Servlet3.0新特性:

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

import org.apache.catalina.core.ApplicationPart;

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;

import java.io.IOException;

import java.io.PrintWriter;

/**

 * Created by IMP on 2016/9/9.

 */

@WebServlet("UploadServlet")

@MultipartConfig(location = "D://")

public class UploadServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doGet(request, response);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

          response.setContentType("text/html;charset=UTF-8");

        PrintWriter out=response.getWriter();

        String path=this.getServletContext().getRealPath("/");

        Part p=request.getPart("file1");

        if(p.getContentType().contains("image")){

            ApplicationPart ap= (ApplicationPart) p;

            String fname1=ap.getSubmittedFileName();

            int path_idx=fname1.lastIndexOf("\\")+1;

            String fname2=fname1.substring(path_idx,fname1.length());

            p.write(path+"/upload/"+fname2);

            out.write("文件上传成功");

        }else{

            out.write("请选择图片文件");  

        }

             

    }

}

猜你喜欢

转载自my.oschina.net/newchaos/blog/1619287