SpringMVC中包含MultipartFile参数的方法如果不上传文件报错的问题

做项目时遇到的一个小问题,在此做个记录。controller的接口中有multipartFile类型的参数,这样在接收参数时可以直接操作文件。但是如果调用此方法时并未上传文件,springmvc在接收数据时,就会抛出异常:

org.springframework.web.multipart.MultipartException: 
The current request is not a multipart request

为了能灵活处理请求,做到是否上传了文件都能请求方法,在参数中将multipartFile类型参数换成HttpServletRequest 参数,判断request是否是multipart请求,如果是,再从请求中获取文件,方法如下:

MultipartFile file = null;
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart){
    MultipartHttpServletRequest multipartRequest =
    WebUtils.getNativeRequest(request,MultipartHttpServletRequest.class);
    file = multipartRequest.getFile("file");
}

上面的方法是在单文件上传,文件类型数据的“key值”为“file”时的接收,这里的“file”可以改为其他键值。如果是多文件上传,我们可以使用如下方法接收:

            // 获取文件map集合
            Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
            // 循环遍历,取出单个文件
            for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
                // 获取单个文件
                MultipartFile mf = entity.getValue();
                // 获得原始文件名
                String fileName = mf.getOriginalFilename();
                System.out.println(fileName);
            }

其实是multipartRequest.getFile(“file”)这个获取单文件方法改成了multipartRequest.getFileMap()获取map集合,然后遍历集合,处理文件数据;

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值