SpringMVC实现图片的上传,并存入数据库

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

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

首先是jsp页面:

 




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

 

配置springmvc.xml:

  
      
      
      
      
      
      
      

首先,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 下的标签中,添加即可:

             

MyJsp:

显示图片

用户名:${user.name}

附数据库的设计:

 

SpringMVC实现图片的上传,并存入数据库_第1张图片

实现结果:

SpringMVC实现图片的上传,并存入数据库_第2张图片

SpringMVC实现图片的上传,并存入数据库_第3张图片

 

SpringMVC实现图片的上传,并存入数据库_第4张图片

 

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

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

SpringMVC实现图片的上传,并存入数据库_第5张图片

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

在页面这样实现

以上。

 

你可能感兴趣的:(JavaWeb,Spring,SpringMVC)