博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

SpringMVC - 04上传文件

Posted on 2020-11-22 20:38  Kingdomer  阅读(96)  评论(0编辑  收藏  举报

SpringMVC - 04上传文件

(1)文件上传客户端三要素

  • 表单项 type = "file"
  • 表单的提交方式是post
  • 表单的enctype属性是多部分表单形式,及enctype = "multipart/form-data" 
    <form action="${pageContext.request.contextPath}/user/quick22" method="post" enctype="multipart/form-data">
        名称<input type="text" name="username"><br/>
        文件<input type="file" name="uploadFile"><br/>
        <input type="submit" value="提交">
    </form>

 

(2)文件上传原理

   > 当form表单修改为多部分表单时,request.getParameter()将失效。

   > enctype="application/x-www-form-urlencoded" 时,form表单的正文内容格式是: key=value&key=value&key=value。

   > 当form表单的enctype取值为Multipart/form-data时,请求正文内容就变成多部分形式。

 

(3)文件上传

(3.1)单文件上传

   > 导入fileupload 和 io 坐标

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>

   > spring-mvc.xml配置文件上传解析器

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="UTF-8"/>           // 上传文件的编码类型
        <property name="maxUploadSize" value="5000000"/>           // 上传文件总大小
        <property name="maxUploadSizePerFile" value="500000"/>     // 上传单个文件的大小
    </bean>

   > 文件上传代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Upload上传文件</title>
</head>
<body>
    <form action="${pageContext.request.contextPath}/user/quick22" method="post" enctype="multipart/form-data">
        名称<input type="text" name="username"><br/>
        文件<input type="file" name="uploadFile"><br/>
        <input type="submit" value="提交">
    </form>
</body>
</html>

 

    @RequestMapping("/quick22")
    @ResponseBody
    public void save22(String username, MultipartFile uploadFile) throws IOException {
        System.out.println(username);
        String originalFilename = uploadFile.getOriginalFilename();
        uploadFile.transferTo(new File("E:\\java\\" + originalFilename));
    }

   > 导入包故障  

Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory ; 未正常导入jar包

 

(3.2)多文件上传,硬编码

    <form action="${pageContext.request.contextPath}/user/quick23" method="post" enctype="multipart/form-data">
        名称<input type="text" name="username"><br/>
        文件<input type="file" name="uploadFile"><br/>
        文件2<input type="file" name="uploadFile2"><br/>
        <input type="submit" value="提交">
    </form>
    @RequestMapping("/quick22")
    @ResponseBody
    public void save22(String username, MultipartFile uploadFile,MultipartFile uploadFile2) throws IOException {
        System.out.println(username);
        String originalFilename = uploadFile.getOriginalFilename();
        uploadFile.transferTo(new File("E:\\java\\" + originalFilename));
        String originalFilename2 = uploadFile2.getOriginalFilename();
        uploadFile2.transferTo(new File("E:\\java\\" + originalFilename2));
    }

(3.3)多文件上传,数组

    @RequestMapping("/quick23")
    @ResponseBody
    public void save23(String username, MultipartFile[] uploadFile) throws IOException {
        System.out.println(username);
        for (MultipartFile file:uploadFile){
            String originalFilename = file.getOriginalFilename();
            file.transferTo(new File("E:\\java\\" + originalFilename));
        }
    }

 

    <form action="${pageContext.request.contextPath}/user/quick23" method="post" enctype="multipart/form-data">
        名称<input type="text" name="username"><br/>
        文件<input type="file" name="uploadFile"><br/>
        文件2<input type="file" name="uploadFile"><br/>
        文件3<input type="file" name="uploadFile"><br/>
        <input type="submit" value="提交">
    </form>