• MultipartFile文件上传


    引用:https://www.cnblogs.com/896240130Master/p/6430908.html

    springmvc 中,文件的上传是通过 MultipartResolver实现的,所以,如果要实现文件的上传,只要在 spring-servlet.xml中注册相应的 MultipartResovler

    MultipartResolver实现类:

    • CommonsMultipartResolver
    • StandardServletMultipartResolver

    区别:
    第一个需要使用 Apache 的 commons-fileupload 等jar包支持,但能在比较旧的 servlet 版本中使用
    第二个不需要第三方jar包支持,他使用servlet内置的上传功能,但只能在servlet3 以上版本使用

    引入 CommonsMultipartResolver

    spring-servlet.xml 中 引入 CommonsMultipartResolver 的bean

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="defaultEncoding" value="utf-8"/>
            <property name="maxUploadSize" value="10485760000" />
            <property name="maxInMemorySize" value="40960"/>
    bean>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    引入StandardServletMultipartResolver

    spring-servlet.xml 中引入 StandardServletMultipartResolver 的bean

     <bean class="org.springframework.web.multipart.support.StandardServletMultipartResolver" name="multipartResolver">
        bean>
    
    • 1
    • 2

    web.xml中 添加 multipart-config 配置

    	<servlet>
    		<servlet-name>springmvcservlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    		<init-param>
    			<param-name>contextConfigLocationparam-name>
    			<param-value>classpath:spring-servlet.xmlparam-value>
    		init-param>
    		<load-on-startup>1load-on-startup>
    		<multipart-config>
    
    			<max-file-size>5242880max-file-size>
    
    			<max-request-size>10485760max-request-size>
    
    			<file-size-threshold>0file-size-threshold>
    		multipart-config>
    	servlet>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    代码:
    jar包:

     <dependency>
          <groupId>commons-fileuploadgroupId>
          <artifactId>commons-fileuploadartifactId>
          <version>1.3.1version>
        dependency>
        <dependency>
          <groupId>commons-iogroupId>
          <artifactId>commons-ioartifactId>
          <version>2.5version>
        dependency>
        
        <dependency>
          <groupId>javax.servletgroupId>
          <artifactId>javax.servlet-apiartifactId>
          <version>3.1.0version>
          <scope>providedscope>
        dependency>
    
        
        <dependency>
          <groupId>org.springframeworkgroupId>
          <artifactId>spring-webmvcartifactId>
          <version>5.2.5.RELEASEversion>
        dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    @RestController
    public class HelloController {
        @PostMapping("/upload")
        public String hello(HttpServletRequest request){
            CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
            System.out.println(multipartResolver.isMultipart(request));
            // 判断是否有文件上传
            if (multipartResolver.isMultipart(request)){
                // 获取MultipartHttpServletRequest
                MultipartHttpServletRequest multiRequest = multipartResolver.resolveMultipart(request);
    //            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
                // 获取request中 所有文件名
                Iterator<String> iterator = multiRequest.getFileNames();
                while (iterator.hasNext()){
                    MultipartFile file = multiRequest.getFile(iterator.next());
    
                    if (!file.isEmpty()){
                        // 上传到这个路径
                        String path = "F:\\images";
                        String fileName = file.getOriginalFilename();
                        String newName = UUID.randomUUID().toString()+fileName.substring(fileName.lastIndexOf("."));
                        File targetFile = new File(path, newName);
                        try {
                            file.transferTo(targetFile);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
    
    
                }
            }
            return "success";
        }
    
        @PostMapping("/upload02")
        public String upload(MultipartFile[] files,HttpServletRequest request) throws IOException {
            if (files != null && files.length>0){
                for (MultipartFile file : files) {
                    System.out.println("文件流"+file.getInputStream());
                    System.out.println("文件字节大小"+file.getSize());
                    System.out.println("文件类型"+file.getContentType());
                    System.out.println("文件数据:"+file.getBytes());
                    System.out.println(file.getName());
                    System.out.println(file.getOriginalFilename());
    
                    // servletContext.getRealPath("/")
                    String filePath = request.getSession().getServletContext().getRealPath("/")+"assets";
                    File dir = new File(filePath);
                    if (!dir.exists()){
                        dir.mkdirs();
                    }
                    String fileUrl = filePath +File.separator+ file.getOriginalFilename();
                    file.transferTo(new File(fileUrl));
                }
            }
    
    
    
            return "hehe";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    遇到的问题
    • postman发送 带file的请求
      在这里插入图片描述

    • MultipartFile 为null
      解决: 1. 没有注入bean , CommonsMultipartResolver 或者 StandardServletMultipartResolver ,
      2 . 前端传入的名字必须和 MultipartFile 的名字 相同

    • request 转 MultipartHttpServletRequest 报错
      解决:multipartResolver.resolveMultipart(request)

       // 获取MultipartHttpServletRequest
        MultipartHttpServletRequest multiRequest = multipartResolver.resolveMultipart(request);
      
      • 1
      • 2

      引用:https://blog.csdn.net/MTone1/article/details/83826124


    springboot中使用 CommonsMultipartResolver

    默认引入的是StandardServletMultipartResolver
    在这里插入图片描述
    注入CommonsMultipartResolver

      @Bean
        CommonsMultipartResolver commonsMultipartResolver(){
            CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
            multipartResolver.setDefaultEncoding("utf-8");
            multipartResolver.setResolveLazily(true);
            multipartResolver.setMaxInMemorySize(40960);
            // 上传文件大小 50M : 50*1024*1024
            multipartResolver.setMaxUploadSize(50*1024*1024);
            return multipartResolver;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

  • 相关阅读:
    Yii 知识点总结
    SuccBI+低代码文档中心 — 可视化分析(仪表板)(上)
    VSCode远程连接
    数据库原理及MySQL应用 | 关系规范化
    PyQt5 PyQtChart
    Kafka消费一致性和幂等性分析
    Node.js | 深入讲解 express 应用程序生成器
    77.每日一练:迭代器遍历容器(牛客)
    资源管理游戏模版进入The Sandbox
    Java8新特性stream和parallelStream有什么区别
  • 原文地址:https://blog.csdn.net/qq_36022463/article/details/126053977