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

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 -->

      <property name="maxUploadSize">

        <value>5242880</value>

      </property>

   </bean>

 

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

1.3    加入上传图片的jar

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


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

 

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

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

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

也可以直接修改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        

 

<form id="itemForm"

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

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

      <table width="100%" border=1>

        <tr>

           <td>商品名称</td>

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

        </tr>

        <tr>

           <td>商品价格</td>

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

        </tr>

        <tr>

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

           <td><input type="text"name="createtime"

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

        </tr>

   <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>

        <tr>

           <td>商品简介</td>

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

        </tr>

        <tr>

           <td colspan="2"align="center"><input type="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,

        BindingResultbindingResult,

        MultipartFileitems_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";

   }

 

摘自传智播客视频

你可能感兴趣的:(mybatis,springMVC,图片上传)