Spring MVC--Multipart数据处理分析

Spring MVC–Multipart数据处理分析

Multipart数据处理其实就是SpringMVC的文件上传。是SpringMVC对原生Servlet的封装,使用起来更加方便。
下面我们一起来看一下实现文件上传的整个代码实现流程:

首先我们需要再pom.xml中引入一个jar包
 <!--文件上传所需要jar-->
  <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
  </dependency>
配置文件上传的解析器

这里我们使用multipartResolver多元素解析器,再property里设置上传文件最大限制,这里的value是按照字节数进行限制,如果为-1表示没限制

 <!--多元素解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--设置上传文件大小上限,单位是字节,-1代表没有限制也是默认的-->
        <property name="maxUploadSize" value="5000000" />
     </bean>
jsp代码

我们使用表单的post请求,将form的enctype属性设置为multipart/form-data。

<div>
   <fieldset>
       <form method="post" action="/demo/upload" enctype="multipart/form-data">
           <input type="file" name="uploadFile" />
           <input type="submit" value="上传"/>
       </form>
   </fieldset>
</div>
后台接口代码

首先我们再SpringMVC上传文件时,后台代码接收文件参数我们使用一个比较特殊的类型MultipartFile接取,我们先去获取文件的后缀,然后将文件改为唯一标识的UUID名称,然后考虑到存储路径下的文件数限制,我们根据日期在目标目录下创建子文件夹,最后调用transferTo方法将文件放入子文件夹,完成整个上传的流程。

 @RequestMapping("/upload")
    public ModelAndView upload(MultipartFile uploadFile, HttpSession session) throws IOException {
        //处理上传文件
        //重命名,获取后缀
        //原始名称
        String originalFilename = uploadFile.getOriginalFilename();
        //扩展名
        String newFilename =originalFilename.substring(originalFilename.indexOf("."),originalFilename.length());
        String newName = UUID.randomUUID().toString()+"."+newFilename;
        //存储,要存储到指定文件夹下 /upload 考虑文件数上限,按照日期生成子文件夹
        String realPath = session.getServletContext().getRealPath("/uploads");
        String datePath = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        File file = new File(realPath + "/" + datePath);
        if(!file.exists()){
            file.mkdirs();
        }
        Date date = new Date();
        uploadFile.transferTo(new File(file,newName));
        ModelAndView modelAndView = new ModelAndView();
        //addObject 其实是向请求域中request.setAttribute("date",date);
        modelAndView.addObject("date",date);
        //封装跳转的页面信息/WEB-INF/jsp/success.jsp物理试图名
        //success逻辑视图名
        modelAndView.setViewName("success");
        return modelAndView;
    }
运行结果

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringMVCSpring框架的一个子模块,用于开发Web应用程序。它与Spring框架的整合主要体现在父子容器的关系上。\[1\]整合SpringMVCSpring框架的目的是为了明确框架的分工。SpringMVC的配置文件用于配置网站的转发逻辑和功能,如视图解析器、文件上传解析器和Ajax支持等。而Spring框架的配置文件用于配置与业务相关的功能,如事务控制和数据源等。\[2\]相比于Struts2框架,SpringMVC的拦截方式是方法级别的,一个方法对应一个request上下文,并且方法同时与一个URL对应,因此SpringMVC更容易实现RESTful URL。\[3\] #### 引用[.reference_title] - *1* [【springspring mvcspring的整合源码分析](https://blog.csdn.net/qq_35436158/article/details/123807419)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [SpringMVCSpring整合](https://blog.csdn.net/qq_39794062/article/details/116453785)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [SpringSpringMvc详细讲解](https://blog.csdn.net/zjxbllg2008/article/details/123271951)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值