zoukankan      html  css  js  c++  java
  • Spring MVC,文件上传

    本文引用自:《Java EE企业级应用开发教程》

    通常情况下,文件上传都是通过表单形式提交给后台服务器;表单必须满足3个条件:

    • 表单的method属性设置为post
    • 表单的enctype属性设置为multipart/form-data
    • 提供类似于<input id="file" type="file" name="uploadfile" multiple="multiple" />的文件上传输入框

    其中,input元素的multiple是HTML5的新属性,允许用户选择多个文件进行上传。

    Spring MVC为文件上传提供支持,这种支持通过MultipartResolver接口的实现类CommonsMultipartResolver完成。需要在配置文件中定义MultipartResolver接口的Bean,此处配置同样可以决定文件编码格式和上传文件的最大值(属性:defaultEncoding、maxUploadSize)。

    CommonsMultipartResolver是Spring MVC内部通过Apache Commons FileUpload技术实现,所以Spring MVC的文件上传需要依赖Apache Commons FileUpload组件。

    步骤一、导入依赖包,修改Maven的pom.xml

            <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.3.3</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.6</version>
            </dependency>

    步骤二、在web.xml中,配置Spring MVC的前端控制器信息

    具体参考:Spring MVC,基于注解的Spring MVC应用

    步骤三、修改springmvc-config.xml,增加如下代码:

        <!-- 配置文件上传解析器 MultipartResolver -->
        <bean id="multipartResolver" class=
       "org.springframework.web.multipart.commons.CommonsMultipartResolver">
              <!-- 设置请求编码格式-->
              <property name="defaultEncoding" value="UTF-8" />
        </bean>

    步骤四、创建文件上传页面fileUpload.jsp,位于WebContent根目录

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>文件上传</title>
    <script>
    // 判断是否填写上传人并已选择上传文件
    function check(){
        var name = document.getElementById("name").value;
        var file = document.getElementById("file").value;
        if(name==""){
            alert("填写上传人");
            return false;
        }
        if(file.length==0||file==""){
            alert("请选择上传文件");
            return false;
        }
        return true;
    }
    </script>
    </head>
    <body>
        <form action="${pageContext.request.contextPath }/fileUpload"
        method="post" enctype="multipart/form-data" onsubmit="return check()">
        上传人:<input id="name" type="text" name="name" /><br />
        请选择文件:<input id="file" type="file" name="uploadfile" 
                                                       multiple="multiple" /><br />
                   <input type="submit" value="上传" />
        </form>
    </body>
    </html>

    注意:只有填写了上传人,并且选择需要上传的文件后,才能正常提交表单

    步骤五、在WEB-INF/jsp目录中,创建uploadSuccess.jsp/uploadError.jsp

    uploadSuccess.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        文件上传成功!
    </body>
    </html>

    uploadError.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        文件上传失败,请重新上传!
    </body>
    </html>

    步骤六、创建控制器类

    package com.itheima.controller;
    import java.io.File;
    import java.net.URLEncoder;
    import java.util.List;
    import java.util.UUID;
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.commons.io.FileUtils;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.MediaType;
    import org.springframework.http.ResponseEntity;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.multipart.MultipartFile;
    /**
     * 文件上传
     */
    @Controller
    public class FileUploadController {
        /**
         * 执行文件上传
         */
        @RequestMapping("/fileUpload")
        public String handleFormUpload(@RequestParam("name") String name,
                @RequestParam("uploadfile") List<MultipartFile> uploadfile,
                HttpServletRequest request) {
            // 判断所上传文件是否存在
            if (!uploadfile.isEmpty() && uploadfile.size() > 0) {
                //循环输出上传的文件
                for (MultipartFile file : uploadfile) {
                    // 获取上传文件的原始名称
                    String originalFilename = file.getOriginalFilename();
                    // 设置上传文件的保存地址目录
                    String dirPath = 
                           request.getServletContext().getRealPath("/upload/");
                    File filePath = new File(dirPath);
                    // 如果保存文件的地址不存在,就先创建目录
                    if (!filePath.exists()) {
                        filePath.mkdirs();
                    }
                    // 使用UUID重新命名上传的文件名称(上传人_uuid_原始文件名称)
                    String newFilename = name+ "_"+UUID.randomUUID() + 
                                                       "_"+originalFilename;
                    try {
                        // 使用MultipartFile接口的方法完成文件上传到指定位置
                        file.transferTo(new File(dirPath + newFilename));
                    } catch (Exception e) {
                        e.printStackTrace();
                           return"error";
                    }
                }
                // 跳转到成功页面
                return "uploadSuccess";
            }else{
                return"uploadError";
            }
        }
    }

    步骤七、测试,打开页面:http://localhost:8080/ssm/fileUpload.jsp

     输入上传人,选择文件,提交,文件将存放于WebContent/upload目录之下。

  • 相关阅读:
    几种常用的曲线
    0188. Best Time to Buy and Sell Stock IV (H)
    0074. Search a 2D Matrix (M)
    0189. Rotate Array (E)
    0148. Sort List (M)
    0859. Buddy Strings (E)
    0316. Remove Duplicate Letters (M)
    0452. Minimum Number of Arrows to Burst Balloons (M)
    0449. Serialize and Deserialize BST (M)
    0704. Binary Search (E)
  • 原文地址:https://www.cnblogs.com/nayitian/p/15378399.html
Copyright © 2011-2022 走看看