springmvc 上传图片文件和创建图片虚拟路径读取图片

2.2 springmvc+mybatis 同时被 2 个专栏收录
48 篇文章 0 订阅
42 篇文章 51 订阅

1        上传图片

1.1    需求

在修改商品页面,添加上传商品图片功能。

1.2    springmvc中对多部件类型解析

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

 

在springmvc.xml中配置multipart类型解析器。(如果表单的类型是multipart,一定要配置这个解析器,否则参数绑定失败,传参失败)

 

<!-- 文件上传 -->

<bean id="multipartResolver"

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

      <!-- 设置上传文件的最大尺寸为5MB -->

      <propertyname="maxUploadSize">

        <value>5242880</value>

      </property>

   </bean>

 

正式项目中会有一个单独的图片服务器,专门用来存储图片

1.3    加入上传图片的jar

上边的解析内部使用下边的jar进行图片上传。


所需jar已传入我的资源页 名字为springmc文件上传

 

1.4    创建图片虚拟 目录 存储图片(在tomcat中)

通过图形界面配置:  路径要配置自己的路径我的路径是D:\java\tomcat\upload\temp\   图片是来自视频截图


也可以直接修改tomcat的配置:

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

<ContextdocBase="D:\java\tomcat\upload\temp" path="/pic" reloadable="false"/>

 

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

 

1.5    上传图片代码

页面  form添加enctype="multipart/form-data"

filenamecontroller形参一致:

1.5.1        

 

<formid="itemForm"

action="${pageContext.request.contextPath}/items/editItemsSubmit.action"  method="post"enctype="multipart/form-data">

<inputtype="hidden"name="id"value="${items.id }"/> 修改商品信息:

      <tablewidth="100%"border=1>

        <tr>

           <td>商品名称</td>

<td><inputtype="text"name="name"value="${items.name }"/></td>

        </tr>

        <tr>

           <td>商品价格</td>

<td><inputtype="text"name="price"value="${items.price }"/></td>

        </tr>

        <tr>

           <td>商品生产日期</td>

           <td><inputtype="text"name="createtime"

              value="<fmt:formatDatevalue="${items.createtime}"pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>

        </tr>

   <tr>

   <td>商品图片</td>

   <td><c:iftest="${items.pic !=null}">

        <imgsrc="/pic/${items.pic}"width=100height=100/>

        <br/>

      </c:if>

      <!-- 上传的控件-->

      <inputtype="file" name="items_pic"/></td></tr>

        <tr>

           <td>商品简介</td>

<td><textarearows="3"cols="30"name="detail">${items.detail}</textarea></td>

        </tr>

        <tr>

           <tdcolspan="2"align="center"><inputtype="submit"value="提交"/></td>

        </tr>

      </table>

   </form>

1.5.2       controller方法

修改:商品修改controller方法:

 

   

@RequestMapping("/editItemsSubmit")
   public String editItemsSubmit(
        Modelmodel,
        HttpServletRequestrequest,
        Integerid,
        @ModelAttribute("items")@Validated(value= { ValidGrouop1.class}) ItemsCustom itemsCustom,
        BindingResult bindingResult,
        MultipartFile items_pic// 用来接收商品图片
   )throwsException {
 
      // 获取验证错误信息
      if(bindingResult.hasErrors()) {
        // 输出错误信息
        List<ObjectError>allerrors = bindingResult.getAllErrors();
        for (ObjectError error :allerrors) {
           System.out.println(error.getDefaultMessage());
        }
        // 错误信息传递到页面
        model.addAttribute("allErrors",allerrors);
        // 使用model的方式使数据回显
        model.addAttribute("items",itemsCustom);
 
        return"items/editItems";
      }
     
      // 上传图片的原始名称
      StringoriginalFilename = items_pic.getOriginalFilename();
      // 上传图片
      if (items_pic !=null&&originalFilename!=null&&originalFilename.length()>0) {//存储图片的物理路径
        Stringpic_path = "D:\\java\\tomcat\\upload\\temp\\";
 
        // 新的图片名称  UUID.randomUUID()随机数
        StringnewFilename = UUID.randomUUID()
              +originalFilename.substring(originalFilename
                    .lastIndexOf("."));
        //新的图片
        Filenewfile=newjava.io.File(pic_path+newFilename);
        //将内存的数据写入磁盘
        items_pic.transferTo(newfile);
        //上传成功需要经新的图片名称写到itemsCustom
        itemsCustom.setPic(newFilename);
      }
 
      // 调用service更新商品信息,页面需要将商品信息传到此方法
      itemsService.updateItems(id,itemsCustom);
      // 重定向不用加跟路径
      // return "redirect:queryItems.action";
      // 页面转发
      return "forward:queryItems.action";
   }

 

摘自传智播客视频

  • 3
    点赞
  • 5
    评论
  • 6
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值