SpringMVC的文件上传

2020-11-05  本文已影响0人  _FireFly_

文件上传

    依赖于Apache提供的两个jar
    commons-io
    commons-fileupload

    基于SpringMVC的方式
    1.配置一个文件解析器 CommonsMultipartResolver
    2.自己写一个Controller
        方法内部像之前一样接收参数即可
        文件参数MultipartFile类型 变量名与前面的key一致
    3.用MultipartFile对象做文件的传输
        transferTo(new File("上传路径"))
基于SpringMVC的文件上传流程.jpg

前端页面index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
    <a href="test.do">测试一下</a><br>

    <form action="upload.do" method="post" enctype="multipart/form-data">
      <input type="text" name="text" value=""><br>
      <input type="file" name="upload"><br>
      <input type="submit" value="upload">
    </form>

  </body>
</html>

TestController上传处理

package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@Controller
public class TestController {

    @RequestMapping("test.do")
    public String test(){
        System.out.println("test好用啦");
        return "welcome.jsp";
    }

    //原生方式处理文件的上传
//    @RequestMapping("upload.do")
//    public String upload(HttpServletRequest request) throws Exception {
//        //获取磁盘文件选项的factory
//        DiskFileItemFactory factory = new DiskFileItemFactory();
//        //创建一个ServletFileUpload对象
//        ServletFileUpload upload = new ServletFileUpload(factory);
//        //让upload对象帮我们去解析request(目的获取数据)
//        List<FileItem> itemList = upload.parseRequest(request);
//        //遍历所有的文件项
//        for(FileItem item : itemList){
//            //每次循环判断一下当前item是文件还是普通表单对象
//            if(item.isFormField()){//普通表单数据
//                String key = item.getFieldName();
//                String value = item.getString("UTF-8");
//                System.out.println(key+"--"+value);
//            }else{//文件数据
//                String fileName = item.getName();//名字可以自己弄一个规则 确保文件名唯一  UUID
//                item.write(new File("D://test//",fileName));
//            }
//        }
//        return "welcome.jsp";
//    }

    //文件上传的时候需要一个临时存储
    //factory.setSizeThreshold(1024000);//设置缓存大小
    //factory.setRepository(new File("路径"));

    @RequestMapping("upload.do")
    public String upload(String text, MultipartFile upload) throws IOException {
        System.out.println("新的controller执行啦");
        System.out.println(text);
        //文件名字
        String fileName = upload.getOriginalFilename();
        //文件对象
        //upload对象帮我们做传输
        upload.transferTo(new File("D://test//",fileName));
        return "welcome.jsp";
    }
}

ApplicationContext.xml 在spring中注册bean 配置文件解析器

CommonsMultipartResolver

<?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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="controller"></context:component-scan>
    <mvc:annotation-driven></mvc:annotation-driven>

    <!--配置文件解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
     <!--设置读取文件的缓存大小-->
        <property name="maxUploadSize" value="10240000"></property>  
    </bean>

</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <filter>
        <filter-name>characterEncoding</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:ApplicationContext.xml</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>mvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>
上一篇 下一篇

猜你喜欢

热点阅读