SpringBoot中关于打印MultipartFile类型参数的log问题

  1. 问题描述
    最近做的需求,有上传文件参数的情况,即 MultipartFile 的情况
    而且大家的系统框架中也有通过类似 @SysLog 注解切面打印入参日志的需要

    这时存在 MultipartFile 类型的参数的时候,估计就会遇见这种类似的情况

    java.io.FileNotFoundException:
    MultipartFile resource [file] cannot be resolved to URL
    MultipartFile resource [file] cannot be resolved to absolute file
    MultipartFile resource [file] cannot be resolved to absolute file path

    可能这个 MultipartFile 这是一个特殊对象的存在吧 ~ ~ ~

    通过 JacksonjavaBean 序列化 MultipartFile 字段成json字符串的时候,有这个问题
    通过 JSONObjectjavaBean 序列化 MultipartFile 字段成 json 字符串的时候,也会有类似的问题

  2. 借鉴,特殊判断

    // 请求参数处理
    final Map<String, Object> paraMap = new HashMap<>(16);
    if (value instanceof MultipartFile) {
    	MultipartFile multipartFile = (MultipartFile) value;
    	String name = multipartFile.getName();
    	String fileName = multipartFile.getOriginalFilename();
    	paraMap.put(name, fileName);
    }
    

    但是这种是针对这种情况的解决

    @GetMapping("/test")
    @ResponseBody
    public void test(Query query, MultipartFile file) {
    	...........
    	return;
    }
    

    像这种情况的,依然无法解决,只能是 兵来将挡水来土掩

    @GetMapping("/test")
    @ResponseBody
    public void test(Query query) {
    	...........
    	return;
    }
    
    public class Query {
    	private MultipartFile file;
    	private Integer page;
    	private Integer size;
    	
    	// 省略Get、Set..........
    }
    

    这个时候就只能将参数对象中的参数Field进行逐一 instanceof MultipartFile,万一出现套娃的情况,就~ ~ ~

  3. 最后
    要么将这种情况的不再进行入参的打印
    要么就进行特殊的判断

MultipartFile 上面已经踩了两个坑了。
This is No.2.
The No.1 https://blog.csdn.net/miao_x_m/article/details/120782398

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot项目使用MultipartFile来上传文件,可以按照以下步骤: 1. 在前端页面添加文件上传表单,例如: ```html <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <button type="submit">上传</button> </form> ``` 2. 在后端Controller添加文件上传处理方法,例如: ```java @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) { if (file.isEmpty()) { return "上传失败,请选择文件"; } try { // 获取文件名 String fileName = file.getOriginalFilename(); // 获取文件的字节数组 byte[] bytes = file.getBytes(); // TODO: 保存文件到指定位置 return "上传成功"; } catch (IOException e) { e.printStackTrace(); return "上传失败:" + e.getMessage(); } } ``` 在上面的代码,我们首先检查上传的文件是否为空,然后获取文件名和文件的字节数组,并将其保存到指定位置。请注意,由于我们使用了`enctype="multipart/form-data"`,因此必须使用`@RequestParam`注解来获取文件参数。 3. 在SpringBoot的`application.properties`文件配置文件上传的最大限制大小,例如: ```properties spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB ``` 在上面的配置,我们将文件上传的最大限制大小设置为10MB。如果上传的文件大小超过了这个限制,将会抛出`MaxUploadSizeExceededException`异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值