springmvc05----上传图片

先用idea设置虚拟目录,点击加号,选择本地的一个文件夹作为图片存放的虚拟目录。

然后设置路径为:/pic

这样用服务器登陆:http://localhost:8080/pic/xxxxx.jpg

ssm项目内:

1.添加Apache文件上传jar包

首先需要下载两个apache上传文件的jar包
commons-fileupload-1.3.1.jar
commons-io-2.4.jar

在controller层:

在原来update方法上增加:形参上增加 MultipartFile pictureFile,用于接收图片

为什么items类中其他数据可以操作service层--操作dao层就可以完成数据变化。但是这个pic属性items类里也有为什么不行呢》

因为图片这个数据接收不过来,必须要用MultipartFile 接过来,然后修改一下才能放到数据库中去。

  1.  获取文件原始名称
            String name = pictureFile.getOriginalFilename();
  2.  保存图片到项目的虚拟目录去
            pictureFile.transferTo(new File("F:\\pic\\"+name));
  3. 保存图片数据到数据库
            items.setPic(name+"."+ext);

            itemService.update(items);

  4. 将数据填充到jsp逻辑视图

     model.addAttribute("item",items);

     

  @RequestMapping("updateitem")
 
    public String update(Model model, Items items, MultipartFile pictureFile) throws Exception {

          获取文件原始名称
        String name = pictureFile.getOriginalFilename();
          文件扩展名
        String ext = FilenameUtils.getExtension(name);
          保存图片到
        pictureFile.transferTo(new File("F:\\pic\\"+name+"."+ext));
          保存图片数据到数据库
        items.setPic(name+"."+ext);

        itemService.update(items);

        model.addAttribute("item",items);
        return "success";

JSP页面

而MultipartFile的参数名必须要与jsp页面中的<input>标签的name一致

而且:form表单的属性加上enctype="multipart/form-data"

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

springmvc.xml

MultipartFile本身只是一个接口,必须要有实现类来实现接收图片的操作,而这个实现类已经帮我们写好了,只需要在springmvc.xml中配置即可。

而且这个实现类的id必须是multipartResolver


    <!--上传图片配置实现类-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--控制上传图片的大小-->byte为单位
        <property name="maxInMemorySize" value="5242880"/>
    </bean>

问题:

经过上面controller层的代码,随便图片上传到数据库了,也保存到虚拟路径了,但是出现了扩展名多余且重复的问题。

变成了xxxx.jpg.jpg

经过测试发现,完全不需要这个截取文件扩展名,直接用name输出即可。

      文件扩展名
        String ext = FilenameUtils.getExtension(name);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值