SpringMVC上传图片(图片相对路径)至数据库,并显示

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33764491/article/details/77440180

用户注册时,需要上传图片(头像),这是该功能的背景。

在实现之前,需要导入两个jar包:commons-fileupload-1.3.1和commons-io-2.4。

首先是jsp页面:

     <form action="file/upload.action" method="post" enctype="multipart/form-data">
      <label>用户名:</label><input type="text" name="name"><br>
      <label>密码:</label><input type="password" name="pwd"><br>
      <label>上传头像:</label><input type="file" name="file"><br>
      <input type="submit">
      </form>


需要注意的是,一定要写 enctype="multipart/form-data",否则springmvc就会解析失败。这个的作用就是将form表单的数据以二进制的方式传输。

 

配置springmvc.xml:

    <!-- 上传文件 -->  
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
        <property name="defaultEncoding" value="utf-8"/>  
        <!-- 最大内存大小 -->  
        <property name="maxInMemorySize" value="10240"/>  
        <!-- 最大文件大小,-1为不限制大小 -->  
        <property name="maxUploadSize" value="-1"/>  
        </bean>  

首先,springmvc上传图片(文件)是通过MultipartResolver(Multipart解析器)处理的,对于MultipartResolver而言它只是一个接口,它有两个实现类。CommonsMultipartResolver和StandardServletMultipartResolver。我用的是前者,它可以在spring的各个版本使用,但是需要依赖第三方包才能实现,而后者不依赖第三方包,但是要求sping版本在3.1以上。

 

po和mapper我是利用逆向工程自动生成的,所以不再书写。需要注意的是:我将MultipartFile定义在实体类中。

 

    public class User {
        private Integer id;
     
        private String name;
     
        private String pwd;
        
        private String image;
        
        private MultipartFile file;

controller:

    @Controller
    @RequestMapping("/file")
    public class UserController {
     
        @Autowired
        IUserService userService;
        
        @RequestMapping("/upload")
        public String upload(User user,HttpServletRequest request,Model model) throws Exception{
          //保存数据库的路径
          String sqlPath = null;
          //定义文件保存的本地路径
          String localPath="D:\\File\\";
          //定义 文件名
          String filename=null;  
          if(!user.getFile().isEmpty()){  
              //生成uuid作为文件名称  
              String uuid = UUID.randomUUID().toString().replaceAll("-","");  
              //获得文件类型(可以判断如果不是图片,禁止上传)  
              String contentType=user.getFile().getContentType();  
              //获得文件后缀名
              String suffixName=contentType.substring(contentType.indexOf("/")+1);
              //得到 文件名
              filename=uuid+"."+suffixName;
              //文件保存路径
              user.getFile().transferTo(new File(localPath+filename));  
          }
          //把图片的相对路径保存至数据库
          sqlPath = "/images/"+filename;
          System.out.println(sqlPath);
          user.setImage(sqlPath);
          userService.addUser(user);
          model.addAttribute("user", user);
          return "MyJsp";
        }

用户上传的图片保存在相应的服务器中(由于自己测试,设置了Apache的虚拟目录,所以讲图片保存在本地硬盘(D盘新建的File目录)下),在数据库中只保存图片的相对路径。

 

Apache虚拟目录的设置:

    在Apache的server.xml 下的<host></host>标签中,添加即可:

              <Context docBase="D:\File"  path="/images" reloadable="false"/>

MyJsp:

    <h3>显示图片</h3>
      <img src="${basePath}${user.image}">用户名:${user.name}
      <hr>

附数据库的设计:

 

实现结果:

 

 

—————————————————————————————————————————————————————————————————————————————9.14更新+改进

注意这个坑,如果你用了逆向的方法selective,进行更新时,会出现无法更新成功的问题,原因就是之前写的是" ",而真正应该是null !

//把图片的相对路径保存至数据库
      sqlPath = filename;
      if(sqlPath!=null){
           user.setUlogo(sqlPath);  
      }

在页面这样实现<img src="${path}">

以上。
---------------------
作者:呢喃北上
来源:CSDN
原文:https://blog.csdn.net/qq_33764491/article/details/77440180
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值