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

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

file的name与controller形参一致:

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方法:

  1. @RequestMapping("/editItemsSubmit")

  2. public String editItemsSubmit(

  3. Modelmodel,

  4. HttpServletRequestrequest,

  5. Integerid,

  6. @ModelAttribute("items")@Validated(value= { ValidGrouop1.class}) ItemsCustom itemsCustom,

  7. BindingResult bindingResult,

  8. MultipartFile items_pic// 用来接收商品图片

  9. )throwsException {

  10.  
  11. // 获取验证错误信息

  12. if(bindingResult.hasErrors()) {

  13. // 输出错误信息

  14. List<ObjectError>allerrors = bindingResult.getAllErrors();

  15. for (ObjectError error :allerrors) {

  16. System.out.println(error.getDefaultMessage());

  17. }

  18. // 错误信息传递到页面

  19. model.addAttribute("allErrors",allerrors);

  20. // 使用model的方式使数据回显

  21. model.addAttribute("items",itemsCustom);

  22.  
  23. return"items/editItems";

  24. }

  25.  
  26. // 上传图片的原始名称

  27. StringoriginalFilename = items_pic.getOriginalFilename();

  28. // 上传图片

  29. if (items_pic !=null&&originalFilename!=null&&originalFilename.length()>0) {//存储图片的物理路径

  30. Stringpic_path = "D:\\java\\tomcat\\upload\\temp\\";

  31.  
  32. // 新的图片名称 UUID.randomUUID()随机数

  33. StringnewFilename = UUID.randomUUID()

  34. +originalFilename.substring(originalFilename

  35. .lastIndexOf("."));

  36. //新的图片

  37. Filenewfile=newjava.io.File(pic_path+newFilename);

  38. //将内存的数据写入磁盘

  39. items_pic.transferTo(newfile);

  40. //上传成功需要经新的图片名称写到itemsCustom

  41. itemsCustom.setPic(newFilename);

  42. }

  43.  
  44. // 调用service更新商品信息,页面需要将商品信息传到此方法

  45. itemsService.updateItems(id,itemsCustom);

  46. // 重定向不用加跟路径

  47. // return "redirect:queryItems.action";

  48. // 页面转发

  49. return "forward:queryItems.action";

  50. }

 

 

 

 

 

摘自传智播客视频

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值