• spring mvc文件上传(上)


    springMVC上传文件是通过MultipartResolver(Multipart解析器)处理的,对于MultipartResolver是一个接口,它有两个实现类

    CommonsMultipartResolver 依赖于Apache下的Jakarta Common FileUplode项目解析Multipart请求,可以在spring的各个版本中使用,只是它要依赖第三方实现包才得以实现
    StandardServletMultipartResolver 是spring3.1版本后的产物,它依赖于Servlet3.0或者更高版本的实现,它不需要依赖第三方包

    你可以使用CommonsMultipartResolver上传文件,也可以使用StandardServletMultipartResolver上传文件,下面先以CommonsMultipartResolver这个解析器上传文件为例,来看看怎么去写。

    使用CommonsMultipartResolver

    1.使用CommonsMultipartResolver

    时需要依赖两个包,你可以在pom.xml中加入这两个包的依赖

    Apache的commons-io和

    commons-fileupload

    2.在applicationContext.xml文件里配置CommonsMultipartResolver的bean

    <!-- 使用CommonsMultipartResolver它需要导入两个依赖包 -->
    <bean id="multipartResolver"

    class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 

      <!--  最大上传 -->  

     <property name="maxUploadSize">
       <value>104857600</value>
     </property>

     <!-- 读取文件到内存中最大的字节数,一般是1024 -->
     <property name="maxInMemorySize">
       <value>4096</value>
     </property>
    </bean>

    下面我们就可以写controller去接收前台的文件提交请求了

    前台:

    前台页面

    <!-- 上传文件的提交编码类型要为multipart/form-data-->

    <form method="post"action="./uploadPart" enctype="multipart/form-data">

      <input type="file" name="file" value="请选择上传的文件">
      <input type="submit" value="提交">
    </form>

    后台(可以有两种方式去处理文件上传的请求):

    第一种:HttpServletRequest

    @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
    public ModelAndView uploadFile(HttpServletRequest request) {
      //进行转换
      MultipartHttpServletRequest msq = (MultipartHttpServletRequest) request;
      //获得请求上传的文件
      MultipartFile file = msq.getFile("file");

      ModelAndView mv = new ModelAndView();
      mv.setView(new MappingJackson2JsonView());// 使返回结果为json格式
      // 创建文件保存路径
      String filename = request.getSession().getServletContext().getRealPath("/") + "upload/";

      // 判断保存路径是否存在,不存在则创建 mkdirs表示创建多层目录 mkdir只能创建一层
      File dest = new File(filename);
      if (!dest.exists()) {
        dest.mkdirs();
      }
      try {
        //获取原始文件名
        filename += file.getOriginalFilename();
        File actdest = new File(filename);//目标文件
        //保存文件
        file.transferTo(actdest);
        mv.addObject("success", true);
        mv.addObject("msg", "上传文件成功");
      } catch (IllegalStateException | IOException e) {
        mv.addObject("success", false);
        mv.addObject("msg", "上传文件失败");
        e.printStackTrace();
      }
      return mv;
    }

    第二种:MultipartFile

    @RequestMapping(value = "/uplodeFileMultipartFile", method = RequestMethod.POST)
    public ModelAndView uplodeFileMultipartFile(MultipartFile file, HttpServletRequest request) {
      ModelAndView mv = new ModelAndView();
      mv.setView(new MappingJackson2JsonView());
      // 获取原始路径名
      String fileName = file.getOriginalFilename();
      file.getContentType();
      // 配置存储文件路径
      String path = request.getSession().getServletContext().getRealPath("/") + "upload/";
      try {
          File filemkdirs = new File(path);
          if (!filemkdirs.exists()) {
            filemkdirs.mkdirs();
          }
          path += fileName;
          File dest = new File(path);
          file.transferTo(dest);
          mv.addObject("success", true);
          mv.addObject("msg", "上传文件成功!");
        } catch (IllegalStateException | IOException e) {
          e.printStackTrace();
          mv.addObject("success", false);
          mv.addObject("msg", "上传文件失败!");
        }
        return mv;
    }

    前进时,请别遗忘了身后的脚印。
  • 相关阅读:
    我的书单
    写一个小demo过程中遇到的各种问题 学生管理考勤系统(网页模拟)
    高程三 面向对象程序设计
    JavaScript 函数与对象的 简单区别
    高程三 基本包装类型部分的学习
    巨简单巨丑的计算器(写的我快自闭了)
    checked选择器实现tab切换
    JavaScript进行简单的随即验证码生成(适合和我一样刚入门一本完整的教材书都没看完的弟弟)
    dom编程艺术章12
    vue插件开发与发布
  • 原文地址:https://www.cnblogs.com/liudaihuablogs/p/8856248.html
Copyright © 2020-2023  润新知