首页 > 技术文章 > SSM-SpringMVC-32:SpringMVC中灌顶传授文件上传

DawnCHENXI 2018-04-02 20:23 原文

 

 

 
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

 

 

我将用自认为最简单的语言,描述Springmvc的文件上传,来将老夫毕生功力灌顶传授给你

首先文件上传,又简至深

前提有吗?jar包,form表单里的属性(method="post" enctype="multipart/form-data")

 

jar包的节点我给出来:

 

        <!--文件上传的jar包-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.4</version>
        </dependency>

 

 

 

下面我开始我第一个案例,最简单的文件上传:

  1.jsp页面:fileupload.jsp

 

<%--
  Created by IntelliJ IDEA.
  User: Dawn
  Date: 2018/4/2
  Time: 14:19
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
<h1>文件上传</h1>
    <form action="${pageContext.request.contextPath}/fileuploadfirst" method="post" enctype="multipart/form-data">
        文件1   <input type="file" name="upload"/>
        <input type="submit"/>
    </form>
</body>
</html>

 

  success.jsp

 

<%--
  Created by IntelliJ IDEA.
  User: Dawn
  Date: 2018/4/2
  Time: 14:19
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>成功</title>
</head>
<body>
    <h1>SUCCESS</h1>
</body>
</html>

 

  2.在webapp下你jsp页面的那个包下创建一个文件夹,我的叫upload,里面随便扔个东西,编译后,如果即使这样target目录下还没有upload这个文件夹的话,就手动创建

  3.创建处理器和处理方法

 

package cn.dawn.day24fileupload;

import com.sun.org.glassfish.gmbal.ParameterNames;
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;

import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;

/**
 * Created by Dawn on 2018/4/2.
 */
@Controller
public class FileupLoad {


    /*最初始版本*/
    @RequestMapping("/fileuploadfirst")
    public String fileuploadfirst(MultipartFile upload, HttpSession session){
        /*获取上传文件的简单名称例如    1.txt*/
        String childrlPath = upload.getOriginalFilename();
        /*获得一个真实路径*/
        String parentPath = session.getServletContext().getRealPath("/day24/upload");
        /*获取一个完整的文件对象*/
        File file=new File(parentPath,childrlPath);
        /*传输创建到本地*/
        try {
            upload.transferTo(file);
            /*上传成功*/
            return "success";
        } catch (IOException e) {
            e.printStackTrace();
        }

        /*上传失败*/
        return "fileupload";
    }
}

 

  4.自己的xml配置文件:这儿其实我想删减点的,文件名中文的处理和文件大小限制放在后面讲也行,不过放在这儿,你们应该也能理解

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context.xsd">

    <!--包扫描器-->
    <context:component-scan base-package="cn.dawn.day24fileupload"></context:component-scan>
    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/day24/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    
    <!--多部分文件解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--文件名的编码-->
        <property name="defaultEncoding" value="UTF-8"></property>
        <!--限制文件大小--><!--这个单位是byte,我这儿限制的是20mb最大容量-->
        <property name="maxUploadSize" value="20971520"></property>
    </bean>

    <!--绑定注解驱动-->
    <mvc:annotation-driven></mvc:annotation-driven>

</beans>

 

  5.web.xml中修改中央处理器的上下文配置参数为上面那个xml

  6.启动tomcat,访问fileupload.jsp页面

 

 

 

第二个案例:多文件上传

  1.jsp页面fileuploadmore.jsp:

 

<%--
  Created by IntelliJ IDEA.
  User: Dawn
  Date: 2018/4/2
  Time: 14:19
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
<h1>文件上传</h1>
    <form action="${pageContext.request.contextPath}/fileuploadsecond" method="post" enctype="multipart/form-data">
        文件1   <input type="file" name="upload"/>
        文件2   <input type="file" name="upload"/>
        文件3   <input type="file" name="upload"/>
        <input type="submit"/>
    </form>
</body>
</html>

 

  success.jsp

 

<%--
  Created by IntelliJ IDEA.
  User: Dawn
  Date: 2018/4/2
  Time: 14:19
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>成功</title>
</head>
<body>
    <h1>SUCCESS</h1>
</body>
</html>

 

  2.处理器处理方法

 

package cn.dawn.day24fileupload;

import com.sun.org.glassfish.gmbal.ParameterNames;
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;

import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;

/**
 * Created by Dawn on 2018/4/2.
 */
@Controller
public class FileupLoad {

    /*多文件版本*/
    @RequestMapping("/fileuploadsecond")
    public String fileuploadsecond(@RequestParam MultipartFile[] upload, HttpSession session){
        for (MultipartFile item :upload) {
            if(item.getSize()>0) {
                /*获取上传文件的简单名称例如    1.txt*/
                String childrlPath = item.getOriginalFilename();
                /*获得一个真实路径*/
                String parentPath = session.getServletContext().getRealPath("/day24/upload");
                /*获取一个完整的文件对象*/
                File file = new File(parentPath, childrlPath);
                /*传输创建到本地*/
                try {
                    item.transferTo(file);
                /*上传成功*/

                } catch (IOException e) {
                    e.printStackTrace();
                    return "fileuploadmore";
                }
            }
        }


        /*上传失败*/
        return "success";
    }



    /*最初始版本*/
    @RequestMapping("/fileuploadfirst")
    public String fileuploadfirst(MultipartFile upload, HttpSession session){
        /*获取上传文件的简单名称例如    1.txt*/
        String childrlPath = upload.getOriginalFilename();
        /*获得一个真实路径*/
        String parentPath = session.getServletContext().getRealPath("/day24/upload");
        /*获取一个完整的文件对象*/
        File file=new File(parentPath,childrlPath);
        /*传输创建到本地*/
        try {
            upload.transferTo(file);
            /*上传成功*/
            return "success";
        } catch (IOException e) {
            e.printStackTrace();
        }

        /*上传失败*/
        return "fileupload";
    }
}

 

  3.自己的xml配置文件

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context.xsd">

    <!--包扫描器-->
    <context:component-scan base-package="cn.dawn.day24fileupload"></context:component-scan>
    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/day24/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    
    <!--多部分文件解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--文件名的编码-->
        <property name="defaultEncoding" value="UTF-8"></property>
        <!--限制文件大小--><!--这个单位是byte,我这儿限制的是20mb最大容量-->
        <property name="maxUploadSize" value="20971520"></property>
    </bean>

    <!--绑定注解驱动-->
    <mvc:annotation-driven></mvc:annotation-driven>

</beans>

 

  4.修改web.xml的中央调度器的上下文配置位置为上面那个xml

  5.在webapp下你jsp页面的那个包下创建一个文件夹,我的叫upload,里面随便扔个东西,编译后,如果即使这样target目录下还没有upload这个文件夹的话,就手动创建

  6.启动tomcat,访问fileuploadmore.jsp页面

 

推荐阅读