文件上传/下载
    依赖于Apache提供的两个jar
    commons-io
    commons-fileupload
    image.png
    基于SpringMVC的方式
    1.配置一个文件解析器 CommonsMultipartResolver
    ApplicationContext.xml(17-18)

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xmlns:mvc="http://www.springframework.org/schema/mvc"
    6. xsi:schemaLocation="http://www.springframework.org/schema/beans
    7. https://www.springframework.org/schema/beans/spring-beans.xsd
    8. http://www.springframework.org/schema/context
    9. https://www.springframework.org/schema/context/spring-context.xsd
    10. http://www.springframework.org/schema/mvc
    11. https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    12. <!--将刚才的bean标签配置去掉 改为开启注解扫描-->
    13. <context:component-scan base-package="controller"></context:component-scan>
    14. <mvc:annotation-driven></mvc:annotation-driven>
    15. <!--配置文件解析器-->
    16. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
    17. </beans>

    2.自己写一个Controller
    方法内部像之前一样接收参数即可
    文件参数MultipartFile类型 变量名与前面的key一致 (index.jsp第9行)
    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("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(text);
            //文件名字
            String fileName=upload.getOriginalFilename();
            //文件对象
            //upload对象帮我们做传输
            upload.transferTo(new File("D://",fileName));
            return "welcome.jsp";
        }
    
    
    }
    

    index.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
      </head>
      <body>
    
        <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>
    

    3.用MultipartFile对象做文件的传输
    transferTo(new File(“上传路径”)) ——-TestController48行