SpringBoot中判断上传文件是否存在

一个栗子

    @PostMapping("add")
    public RspMsg add(@RequestParam Map<String,Object> param,HttpServletRequest request, @RequestHeader("userNo")String userNo){
        log.info("---->开始添加案件,{}",param);
        RspMsg rspMsg=new RspMsg();
        MultipartFile multipartFile = null;
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if (isMultipart){
            MultipartHttpServletRequest multipartRequest = WebUtils.getNativeRequest(request, MultipartHttpServletRequest.class);
            multipartFile = multipartRequest.getFile("file");
        }
        try {
            rspMsg=caseManageSer.add(param,userNo,multipartFile);
        } catch (Exception e) {
            log.error("添加案件异常",e);
            rspMsg.setFailMsg("添加失败");
        }
        log.info("添加案件结束<----",rspMsg);
        return rspMsg;
    }

我们知道,如果不用HttpServletRequest来接收multipartFile的话,必须用@RequestParam(“file”) MulitpartFile file来指明有mulitpartFile文件,不然是不会接收到文件的.

我们可以这样理解,如果是form表单形式传输,需要把Content-Typemulitpart/from-data,注意了这/,他使用这个分开,说明,普通的data和mulipart是分开来传输的,虽然说他们都是统一的格式,所以我们获取也需要分开来获取(个人理解)。

然后,还遇到了一个坑,就是一般用@RequestParam,就是将数据放在了表单中,如果按照HTTP标准规定的话,一般get请求,才会将数据放在form表单中(注意了,这里我用的chrom内核的浏览器,别的浏览器我不能保证,POST请求也能获取到表单中的数据),所以一开始我也使用的GET请求,但是到了这一行判断,他返回的是false,这也就意味着系统认为我们的请求是不含mulipart数据的???

if (isMultipart)

我们查看他的源码:

    public static final boolean isMultipartContent(
            HttpServletRequest request) {
        if (!POST_METHOD.equalsIgnoreCase(request.getMethod())) {
            return false;
        }
        return FileUploadBase.isMultipartContent(new ServletRequestContext(request));
    }

真相大白了!如果不是POST请求,直接返回false。

所以改成POST请求,运行成功!

另外说一句,springboot的前世还是springMVC,所以他是集大成者,借鉴了很多springMVC的东西,感觉还是有些糟粕的,希望能越来越完善!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值