通过反射修改MultipartFile类文件名

2024-01-12 23:28

本文主要是介绍通过反射修改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>

这篇关于通过反射修改MultipartFile类文件名的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/599492

相关文章

Java下载文件中文文件名乱码的解决方案(文件名包含很多%)

《Java下载文件中文文件名乱码的解决方案(文件名包含很多%)》Java下载文件时,文件名中文乱码问题通常是由于编码不正确导致的,使用`URLEncoder.encode(filepath,UTF-8... 目录Java下载文件中文文件名乱码问题一般情况下,大家都是这样为了解决这个问题最终解决总结Java下

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

Java通过反射获取方法参数名的方式小结

《Java通过反射获取方法参数名的方式小结》这篇文章主要为大家详细介绍了Java如何通过反射获取方法参数名的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、解决方式方式2.1: 添加编译参数配置 -parameters方式2.2: 使用Spring的内部工具类 -

MySQL修改密码的四种实现方式

《MySQL修改密码的四种实现方式》文章主要介绍了如何使用命令行工具修改MySQL密码,包括使用`setpassword`命令和`mysqladmin`命令,此外,还详细描述了忘记密码时的处理方法,包... 目录mysql修改密码四种方式一、set password命令二、使用mysqladmin三、修改u

使用Python在Excel中插入、修改、提取和删除超链接

《使用Python在Excel中插入、修改、提取和删除超链接》超链接是Excel中的常用功能,通过点击超链接可以快速跳转到外部网站、本地文件或工作表中的特定单元格,有效提升数据访问的效率和用户体验,这... 目录引言使用工具python在Excel中插入超链接Python修改Excel中的超链接Python

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

python修改字符串值的三种方法

《python修改字符串值的三种方法》本文主要介绍了python修改字符串值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录第一种方法:第二种方法:第三种方法:在python中,字符串对象是不可变类型,所以我们没办法直接

Mysql8.0修改配置文件my.ini的坑及解决

《Mysql8.0修改配置文件my.ini的坑及解决》使用记事本直接编辑my.ini文件保存后,可能会导致MySQL无法启动,因为MySQL会以ANSI编码读取该文件,解决方法是使用Notepad++... 目录Myhttp://www.chinasem.cnsql8.0修改配置文件my.ini的坑出现的问题

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚: