springmvc上传图片

在页面form中提交enctype="multipart/form-data"的数据时,需要springmvc对multipart类型的数据进行解析

Ⅰ、在springmvc.xml中配置multipart类型解析器

    <!-- 文件上传 -->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置上传文件的最大尺寸为5MB -->
        <property name="maxUploadSize">
            <value>5242880</value>
        </property>
    </bean>

Ⅱ、加入上传图片的jar

  1、下载commons-fileupload官方地址:https://commons.apache.org/proper/commons-fileupload/

    

  2、下载commons-io官方地址:https://commons.apache.org/proper/commons-io/

     

   3、创建图片虚拟目录存储图片

    3.1、图形化创建虚拟目录

    

    ①、双击Tomcat

    3.2、直接修改tomcat的配置 

      在conf/server.xml文件,添加虚拟 目录

              

<Context docBase="D:\workspace\upload" path="/pic" reloadable="true"/>

  注意:在图片虚拟目录 中,一定将图片目录分级创建(提高i/o性能),一般我们采用按日期(年、月、日)进行分级创建

   ④、上传图片页面

<tr>
    <td>商品图片</td>
    <td>
        <c:if test="${items.pic !=null}">
            <img src="/pic/${items.pic}" width=100 height=100/>
            <br/>
        </c:if>
        <input type="file"  name="items_pic"/> 
    </td>
</tr>

  ⑤、controller方法

    @RequestMapping("/editItemsSubmit")
    public String editItemsSubmit(Model model, @Validated(value = { ValidGroup1.class }) ItemsCustom itemsCustom,
            BindingResult bindingResult, MultipartFile items_pic// 接收商品图片
    ) throws Exception {
        // 获取校验错误信息
        if (bindingResult.hasErrors()) {
            // 输出错误信息
            List<ObjectError> allErrors = bindingResult.getAllErrors();

            for (ObjectError objectError : allErrors) {
                // 输出错误信息
                System.out.println(objectError.getDefaultMessage());

            }
            // 将错误信息传到页面
            model.addAttribute("allErrors", allErrors);
            // 可以直接使用model将提交pojo回显到页面
            model.addAttribute("items", itemsCustom);

            // 出错重新到商品修改页面
            return "items/editItems";

        }
        // 原始名称
        String originalFilename = items_pic.getOriginalFilename();
        // 上传图片
        if (items_pic != null && originalFilename != null && originalFilename.length() > 0) {

            // 存储图片的物理路径
            String pic_path = "D:\\workspace\\upload\\";

            // 新的图片名称
            String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
            // 新图片
            File newFile = new File(pic_path + newFileName);

            // 将内存中的数据写入磁盘,主要看看虚拟路径对应的物理路径中有没有这个图片
            items_pic.transferTo(newFile);

            // 将新图片名称写到itemsCustom中,没有使用数据库,所以就直接返回
            itemsCustom.setPic(newFileName);
            model.addAttribute("itemsCustom", itemsCustom);
        }
        return "items/editItems";
    }

 

posted @ 2021-07-19 16:32  一杯水M  阅读(468)  评论(0编辑  收藏  举报