zoukankan      html  css  js  c++  java
  • 文件上传

    文件上传

      1.MultipartResolver接口

        1)用于处理上传请求,将上传请求包装成可以直接获取文件的数据,方便操作

        2)两个实现类

          StandardServletMultipartResolver

          使用了Servlet3.0标准的上传方式

          CommonsMultipartResolver

          使用了Apache的commons-fileupload来完成具体的上传操作

      2. 使用 CommonsMultipartResolver实现单文件上传

        第一步:导入jar

          commons-io-2.4.jar

          commons-fileupload-1.2.2.jar

        第二步:配置文件(springmvc.xml)

          <bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

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

              <property name="defaultEncoding" value="UTF-8"/>

          </bean>

        第三步:表单页面

          method="POST"

          enctype="multipart/form-data"

          指定表单内容类型,支持文件上传

          <input type="file" name="a_idPicPath"/>

          用来上传文件的file组件

        第四步:实现controller(多文件上传)

          例:public String add(@Valid User user,BindingResult bindingResult,HttpServletRequest request,

                   @RequestParam(value="a_idPicPath",required = false) MultipartFile[] attachs){

            for(int i=0;i<attachs.length;i++){

              //操作图片

              if(!attachs[i].isEmpty()){

                //1.找到目录

                String path = request.getSession()

                      .getServletContext()

                      .getRealPath("statics"+File.separator+"uploadfiles");

                //2.创建文件

                //2.1 原来文件名

                String oldName = attachs[i].getOriginalFilename();

                String suffix = FilenameUtils.getExtension(oldName);

                //2.2 取名字

                String fileName = System.currentTimeMillis()+"_user."+suffix;

                File targetFile = new File(path,fileName);

                //把图片放到指定的目录

                try {

                  attachs[i].transferTo(targetFile);

                } catch (Exception e) {

                  e.printStackTrace();

                  request.setAttribute("uploadError", "上传失败");

                  return "useradd";

                }

                //设置数据库值

                if(i==0){

                  user.setIdPicPath(path+File.separator+fileName);

                }

                if(i==1){

                  user.setWorkPicPath(path+File.separator+fileName);

                }

              }

            }

            user.setCreationDate(new Date());

            user.setCreatedBy(((User)request.getSession().getAttribute(Constants.USER_SESSION)).getId());

            if(userService.add(user)){

              return "redirect:query";

            }else{

              return "useradd";

            }

          }

          注意:a)MultipartFile

              Spring MVC会将上传文件绑定到MultipartFile对象中,并通过该对象完成文件的上传操作提供的方法

            b)File.separator

              Windows、Linux自适应路径分隔符

              低入侵性的代码实现

            c)必须对上传文件进行重命名

          原因

            原文件名存在中文                          乱码问题

            原文件名与服务器上已有文件重名    覆盖问题

            重新定义上传文件名(保证不重名)

            当前系统时间+随机数+“_Personal.jpg”

             d)文件上传成功后,须更新数据库字段(idPicPath),记录上传文件的存储路径

      3. 多文件上传(基本同上)

        1)上传文件的组件名一致,以数组的形式传递给控制器的处理方法

          <label for="a_idPicPath">证件照:</label>

          <input type="file" name="attachs" id="a_idPicPath"/>

          <label for="a_workPicPath">工作证照片:</label>

          <input type="file" name="attachs" id="a_workPicPath"/>

         2) 控制器-处理方法addUserSave()

          修改入参MultipartFile为数组

          MultipartFile[] attachs

          MultipartFile[] 数组内存放文件对象顺序

           按照form表单的file标签的顺序进行存储

          分别更新字段:idPicPath、workPicPath

           注意:若入参对象MultipartFile为数组时,

            该参数前面必须要加上@RequestParam注解,否则会报错

  • 相关阅读:
    [转]JIRA 7.2.6与Confluence 6.0.3的安装与配置之MS SQL Server版
    Vue中computed和watch使用场景和方法
    vue插槽 slot 插槽之间的父子传参
    VUE 父子组件的传递 props、$ref 、 $emit、$parent、$children、$root
    div水平居中 垂直居中
    三次握手 四次挥手
    TCP/IP各层网络协议的通俗理解
    学习 cookie session 正向代理和反向代理的区别
    学习vuex心得体会
    登陆界面 跟后台对接口
  • 原文地址:https://www.cnblogs.com/yang82/p/8421564.html
Copyright © 2011-2022 走看看