您当前的位置: 首页 >  ar

wespten

暂无认证

  • 1浏览

    0关注

    899博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

springmvc整合CommonsMultipartResolver文件上传

wespten 发布时间:2018-10-06 11:58:11 ,浏览量:1

spring mvc的文件上传模块是可插拔的,默认没有启用,只要在 spring mvc 容器中实例化 MultipartResolver 接口的实现类即可,spring mvc 为我们提供了整合了 commons-fileupload 的 CommonsMultipartResolver 解析器,只需实例化该类即可。

配置文件



      
      
    
    
        
        
    
    
        
 
         
    

解析器id必须是multipartResolver,否则spring将在上传超过3m文件时会报错!!!

jsp








Insert title here



    
        
        
    

java后台

@RequestMapping(value="/file")
@Controller
public class FileController {
    
    @RequestMapping(value="/init")
    public String init(){
        
        return "file";
    }
    
    @RequestMapping(value="/upLoad")
    @ResponseBody
    public void upLoad(HttpServletRequest request) throws Exception{
        
        //创建一个多分解的容器
        CommonsMultipartResolver cmr = new CommonsMultipartResolver(request.getSession().getServletContext());
        //设置编码
        cmr.setDefaultEncoding("utf-8");
        //判断是否有文件上传
        if(cmr.isMultipart(request)){
            //将request转换成多分解请求
            MultipartHttpServletRequest mhs = cmr.resolveMultipart(request);
            //根据input中存在的name来获取是否存在上传文件
            MultipartFile mf = mhs.getFile("file");#这里可以用getFiles("file")的方式来处理多个文件。返回的是一个list.然后一个一个处理就可以了
            //创建文件保存名
            File file = new File(mf.getOriginalFilename());
            //上传文件
            mf.transferTo(file);
        }
    }
}

使用MultipartFile类的相关API完成文件上传

@Controller
public class FileUploadController {
    private static final String UPLOAD_DIR = "/srv/www/upload/";
    private static final long MAX_FILE_SISE = 1000000;

    @RequestMapping("/upload")
    public void uploadFile(@RequestParam("file") MultipartFile file) {
        if(!file.isEmpty()) {
            //获取文件类型
            String contentType = file.getContentType();
            if(!contentType.equals("")) {
                //可以对文件类型进行检查
            }
            //获取input域的name属性
            String name = file.getName();
            //获取文件名,带扩展名
            String originFileName = file.getOriginalFilename();
            //获取文件扩展名
            String extension = originFileName.substring(originFileName.lastIndexOf("."));
            System.out.println(extension);
            //获取文件大小,单位字节
            long site = file.getSize();
            if(site > MAX_FILE_SISE) {
                //可以对文件大小进行检查
            }
            //构造文件上传后的文件绝对路径,这里取系统时间戳+文件名作为文件名
            //不推荐这么写,这里只是举例子,这么写会有并发问题
            //应该采用一定的算法生成独一无二的的文件名
            String fileName = UPLOAD_DIR + String.valueOf(System.currentTimeMillis()) + extension;
            try {
                file.transferTo(new File(fileName));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

 

关注
打赏
1665965058
查看更多评论
立即登录/注册

微信扫码登录

0.0384s