穿越Java - 开发框架篇 第三章 Spring Mvc | 第10节Spring Mvc 中的文件上传

开发环境

基于:IntelliJ IDEAMaven构建工具JDK1.8SpringBoot 2.3.4Spring4.3.28编写。

官人如需使用 IDEA 请阅读教程:IntelliJ IDEA
官人如需使用 Maven 请阅读教程:Maven 构建工具的下载与安装

更多干货

请参考:《穿越 Java 之 语法基础篇》 系列文章
请参考:《穿越 Java 之 Web基础篇 》系列文章
请参考:《穿越 Java 之 开发必备框架篇 》 系列文章
请阅读:《穿越 Java 之 SpringBoot框架篇》系列文章
请阅读:《穿越 Java 之 SpringCloud微服务架构篇》 系列文章

页面

  • form表单需要注意:
    method = “post"
    encrytype=“multipart/form-data”
    form表单的action 属性指定位置 进行上传操作。

Spring里的配置

1.显示页面。 页面在WEB-INF下客户打不开 需要 controller

  • 默认情况下,Spring MVC 的 MultipartResolver 组件,并没有配置在Spring容器中(DispatcherServlet就不会使用) 下图为源码过程
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 要想处理文件上传的请求,需要自己向容器中注册 该组件

在这里插入图片描述

要求

  • bean的名称必须是multipartResolver,类型必须是 MultipartResolver的实现类。
    下图两个实现类 StandardServletMultipartResolver是标准的Servlet 3.0以后的实现 ,
    CommonsMultipartResolver是 Commons fileupload 组件的实现

    在这里插入图片描述

总结

  • 如果DispatcherServlet的某种组件只有一个时, 它的名字是不行瞎叫的(名字就是接口的首字母小写)。

  • 如果某种组件的个数有多个,名字起不起,以及叫什么都无所谓,只要类型匹配即可。

  • 如果使用 CmmonsMultipartResolver 需要导入依赖:

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
   <version>1.4</version>
</dependency>
  • 后续处理器方法上的形参类型可以写(MultipartFile)。
    @PostMapping("/upload")
    public String upload(@RequestParam("photo") MultipartFile file) throws IOException {

        String originalFilename = file.getOriginalFilename();//原始文件名
        String extension = originalFilename.substring(originalFilename.lastIndexOf(".")); //后缀名
        String filename= UUID.randomUUID().toString().replace("-", "") + extension;

        //假设上传到C盘
        String realPath = webApplicationContext.getServletContext().getRealPath("/upload");
        file.transferTo(new File(realPath,filename));

        return "redirect:http://www.baidu.com";
    }

野路子

    @PostMapping("/upload2")
    public String upload2(HttpServletRequest request){
        CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getServletContext());
        MultipartHttpServletRequest multipartHttpServletRequest = commonsMultipartResolver.resolveMultipart(request);
        MultipartFile photo = multipartHttpServletRequest.getFile("photo");

        //后续都一样。
        System.out.println(photo!=null);

        return "redirect:http://www.baidu.com";
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值