SpringMvc文件上传

文件上传

说明

在Java中,主流的文件上传方式有两种,分别是通用文件上传(commons-fileupload)和Servlet3.0方式的文件上传。SpringMVC分别对着两种方式都做了支持。

  • CommonsMultipartResolver
  • StandardServletMultipartResolver

除此之外SpringMVC对文件上传的接口做了统一的封装,使用MultipartFile接口代替了通用上传中的FileItem和Servlet3.0中的Part,使得开发人员在业务代码中可以使用统一的接口处理,而不用管底层用的是哪种文件上传实现方式。

基于Apache Fileupload通用文件上传包

  1. 添加依赖

    
        commons-fileupload
        commons-fileupload
        1.4
    
    
        commons-io
        commons-io
        2.6
    
    
  1. 在SpringMVC配置文件中添加MultipartResolver文件上传解析器

    
    
        
        
    
    
  1. 在Controller中编写文件上传逻辑代码

"myFile" 对应jsp页面上传文件的组件name

@RequestMapping("/upload")
public String upload(@RequestParam("myFile") MultipartFile file, HttpServletRequest req, Model model) {
    try {
        // 使用SpringMVC给我们提供的工具类获取项目中upload文件夹在硬盘上的绝对路径
        String uploadPath = WebUtils.getRealPath(req.getServletContext(), "/upload/");
        // 将上传的文件写到上传目录
        file.transferTo(new File(uploadPath+file.getOriginalFilename()));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

基于Servlet3.0标准API文件上传

  1. 开启Servlet文件上传支持

    web.xml

    
        dispatcher
        org.springframework.web.servlet.DispatcherServlet
        
        
    
    
        dispatcher
        /
    
    
  1. 在SpringMVC中配置MultipartResolver

    
    
    
  1. 在Controller中编写文件上传逻辑代码

    实现方式同通用上传代码一样。

文件名上传乱码问题

  • 使用通用上传方式的解决方法

    在配置的CommonsMultipartResolver bean中注入属性

    
    
        
        
    
    
  • 使用Servlet3.0标准上传方式的解决方法

    通过配置SpringMVC提供的编码过滤器解决

    web.xml

    
        characterFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
        
            forceEncoding
            true
        
    
    
        characterFilter
        /*
    
    

    本质上还是设置请求的编码 request.setCharacterEncoding("UTF-8");

你可能感兴趣的:(SpringMvc文件上传)