通过反射修改MultipartFile类文件名

1、背景
项目上有这样一个需求,前端传文件过来,后端接收后按照特定格式对文件进行重命名。(修改文件名需求其实也可以在前端处理的)

//接口类似于下面这个样子
@PosMapping("/uploadFile")
public R uploadFile(List<MultipartFile> fileList)

2、问题

本来以为通过set方法修改一下文件名就行,但是去操作时发现MultipartFile类并没有set方法,就没办法通过set直接修改文件名了。
在这里插入图片描述

3、解决方案
网上的解决方案基本都是从文件流下手,拷贝文件流后把文件流写入新文件。
这里介绍一种新的解决方案通过反射修改MultipartFile类文件的文件名。

/**
     * 通过反射重命名文件名
     * @param fileList
     * @param name
     * @return
     */
    public void rename(List<MultipartFile> fileList, String newFileName){
   
        for(MultipartFile file:fileList){
   
            //此处需要获取filename字段 而不是name或者originalFilename字段 
            //ReflectUtil工具类来自于hutool工具类
            //import cn.hutool.core.util.ReflectUtil;
          ReflectUtil.setFieldValue(file,"filename",newFileName);
        }
    }

注意:

ReflectUtil.setFieldValue(file,"filename",newFileName);`

这行代码此处需要替换filename字段 而不是MultipartFile类的name或originalFilename字段(通过debug发现,springboot在处理文件时,并没有直接操作MultipartFile这个类,而是通过操作StandardMultipartHttpServletRequest类来处理的,可见下图,这里可能理解的不太正确,因为我也是debug发现这个现象,等我知道原理里就把括号内的内容删掉)
在这里插入图片描述
当然,如果不是通过mvc三层处理文件,只是想普通的替换一下文件名,还是需要替换MultipartFile类的name或originalFilename字段,参考如下

ReflectUtil.setFieldValue(file,"name",newFileName);

或者

ReflectUtil.setFieldValue(file,"originalFilename",newFileName);

4、补充
ReflectUtil工具类来自于hutool工具类
hutool工具类的maven参考依赖

			<dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>5.8.12</version>
            </dependency>

相关推荐

  1. 本地文件转为MultipartFile,图片地址转MultipartFile

    2024-01-16 11:32:02       10 阅读
  2. c#通过反射完成对象自动映射

    2024-01-16 11:32:02       22 阅读
  3. 前端同时上传json对象和MultipartFile文件

    2024-01-16 11:32:02       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-16 11:32:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-16 11:32:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-16 11:32:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-16 11:32:02       18 阅读

热门阅读

  1. Tomcat教程

    2024-01-16 11:32:02       35 阅读
  2. 根据屏幕尺寸设置html根字号fontSize大小并刷新

    2024-01-16 11:32:02       33 阅读
  3. Ubuntu纯净服务器系统使用Nginx+uwsgi部署django项目

    2024-01-16 11:32:02       36 阅读
  4. Vue+Koa2 搭建前后端分离项目

    2024-01-16 11:32:02       33 阅读
  5. 距离场和距离变换:distance_transform

    2024-01-16 11:32:02       34 阅读
  6. 计算机视觉市场分析:预计2029年将达到870亿元

    2024-01-16 11:32:02       37 阅读
  7. 代码仓库gitlab的数据迁移步骤

    2024-01-16 11:32:02       30 阅读
  8. Github Copilot 的使用方法和快捷键

    2024-01-16 11:32:02       34 阅读
  9. Github Copilot 的使用方法和快捷键

    2024-01-16 11:32:02       47 阅读
  10. 【go语言】读取toml文件

    2024-01-16 11:32:02       39 阅读
  11. @Autoware和@Resource区别

    2024-01-16 11:32:02       30 阅读
  12. 鸿蒙开发笔记(二):自定义组件

    2024-01-16 11:32:02       35 阅读