通过反射修改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类文件名
1、背景 项目上有这样一个需求,前端传文件过来,后端接收后按照特定格式对文件进行重命名。(修改文件名需求其实也可以在前端处理的) //接口类似于下面这个样子 PosMapping("/uploadFile") public R uploadFile(List<MultipartFile> fil…...
Macos下修改Python版本
MacOS下修改Python版本 安装 查看本机已安装的Python版本:where python3 ~ where python3 /usr/bin/python3 /usr/local/bin/python3 /Library/Frameworks/Python.framework/Versions/3.12/bin/python3如果没有你想要的版本,去python官网下载安装包。…...
多种采购方式下,数智化招标采购系统建设解决方案
广发证券成立于1991年,是国内首批综合类证券公司,先后于2010年和2015年在深圳证券交易所及香港联合交易所主板上市。 多年来,广发证券在竞争激烈、复杂多变的行业环境中努力开拓、锐意进取,以卓越的经营业绩、持续完善的全面风险…...
Java选择排序
选择排序是一种简单直观的排序算法,其基本思想是每一轮从待排序的元素中选择最小(或最大)的元素,将其与当前位置的元素交换。选择排序的实现步骤可以简要概括为: 初始化: 遍历整个数组,将当前位…...
[足式机器人]Part3 机构运动学与动力学分析与建模 Ch00-1 坐标系与概念基准
本文仅供学习使用,总结很多本现有讲述运动学或动力学书籍后的总结,从矢量的角度进行分析,方法比较传统,但更易理解,并且现有的看似抽象方法,两者本质上并无不同。 2024年底本人学位论文发表后方可摘抄 若有…...
【金猿人物展】DataPipelineCEO陈诚:赋能数据应用,发挥未来生产力
陈诚 本文由DataPipelineCEO陈诚撰写并投递参与“数据猿年度金猿策划活动——2023大数据产业年度趋势人物榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 我们处在一个“见证奇迹”的时代。在过去的20年间,我们见证了大数据技术快速发展所带…...
4D 毫米波雷达:智驾普及的新路径(二)
4 4D 毫米波的技术路线探讨 4.1 前端收发模块 MMIC:级联、CMOS、AiP 4.1.1 设计:级联、单芯片、虚拟孔径 4D 毫米波雷达的技术路线主要分为三种,分别是多级联、级联 虚拟孔径成像技术、以及 集成芯片。( 1 )多级…...
element plus自定义组件表单校验
方式一: import { formContextKey, formItemContextKey } from "element-plus";// 获取 el-form 组件上下文 const formContext inject(formContextKey, void 0); // 获取 el-form-item 组件上下文 const formItemContext inject(formItemContextKey, …...
C //练习 4-13 编写一个递归版本的reverse(s)函数,以将字符串s倒置。
C程序设计语言 (第二版) 练习 4-13 练习 4-13 编写一个递归版本的reverse(s)函数,以将字符串s倒置。 注意:代码在win32控制台运行,在不同的IDE环境下,有部分可能需要变更。 IDE工具:Visual S…...
DNS解析和主从复制
一、DNS名称解析协议 二、DNS正向解析 三、DNS主从复制 主服务器 从服务器...
光猫(无限路由器)插入可移动硬盘搭建简易版的NAS
1.场景分析 最近查询到了许多有关NAS的资料,用来替代百度云盘等确实有很多优势,尤其是具有不限速(速度看自己配置)、私密性好、一次投入后续只需要电费即可等优势。鉴于手上没有可以用的资源-cpu、机箱、内存等,查询到…...
SpringIOC之support模块GenericGroovyApplicationContext
博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…...
Awesome 3D Gaussian Splatting Resources
GitHub - MrNeRF/awesome-3D-gaussian-splatting: Curated list of papers and resources focused on 3D Gaussian Splatting, intended to keep pace with the anticipated surge of research in the coming months. 3D Gaussian Splatting简明教程 - 知乎...
【镜像压缩】linux 上 SD/TF 卡镜像文件压缩到实际大小的简单方法(树莓派、nvidia jetson)
文章目录 1. 备份 SD/TF 卡为镜像文件2. 压缩镜像文件2.1. 多分区镜像文件的压缩(树莓派、普通 linux 系统等)2.2. 单分区镜像文件的压缩(Nvidia Jetson Nano 等) 3. 还原镜像文件到 SD/TF 卡4. 镜像还原后处理4.1. 镜像分区调整4…...
Zookeeper 和 naocs的区别
Nacos 和 ZooKeeper 都是服务发现和配置管理的工具,它们的主要区别如下:功能特性:Nacos 比 ZooKeeper 更加强大,Nacos 支持服务发现、动态配置、流量管理、服务治理、分布式事务等功能,而 ZooKeeper 主要用于分布式协调…...
2-6基础算法-快速幂/倍增/构造
文章目录 一.快速幂二.倍增三.构造 一.快速幂 快速幂算法是一种高效计算幂ab的方法,特别是当b非常大时。它基于幂运算的性质,将幂运算分解成一系列的平方操作,以此减少乘法的次数。算法的核心在于将指数b表示为二进制形式,并利用…...
行业内参~移动广告行业大盘趋势-2023年12月
前言 2024年,移动广告的钱越来越难赚了。市场竞争激烈到前所未有的程度,小型企业和独立开发者在巨头的阴影下苦苦挣扎。随着广告成本的上升和点击率的下降,许多原本依赖广告收入的创业者和自由职业者开始感受到前所未有的压力。 dz…...
【笔记】书生·浦语大模型实战营——第四课(XTuner 大模型单卡低成本微调实战)
【参考:tutorial/xtuner/README.md at main InternLM/tutorial】 【参考:(4)XTuner 大模型单卡低成本微调实战_哔哩哔哩_bilibili-【OpenMMLab】】 总结 学到了 linux系统中 tmux 的使用 了解了 XTuner 大模型微调框架的使用 pth格式参数转Hugging …...
开源的Immich自建一个堪比 iCloud 的私有云相册和备份服务
源码地址 GitHub - immich-app/immich: Self-hosted photo and video backup solution directly from your mobile phone. 1.创建目录 mkdir /data/immich && cd /data/immich 2.下载docker-compose文件和.env文件 wget https://github.com/immich-app/immich/relea…...
SPI通信讲解
了解SPI通信对于我们了解通信有非常重要的意义。 SPI(Serial Peripheral Interface)是由Motorola公司(摩托罗拉)开发的一种通用数据总线 四根通信线: SCK(Serial Clock):时钟线&a…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
