通过反射修改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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/342765.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

adrv9009使用记录

这里写自定义目录标题 1.首先下载cygwin&#xff0c;CSDN可以直接搜索&#xff0c;按照对应的安装就可以&#xff0c;最后记得加一个make安装包&#xff0c;不然在make时候会导致指令不存在 2.下载完成之后&#xff0c;去adi-github官网找到对应版本的adrv9009工程 https://git…

jmeter和meterSphere如何使用第三方jar包

工具引用jar包语言都是beanshell 问题起因&#xff1a;metersphere 接口自动化实现过程中&#xff0c;如何实现字符串加密且加密方法依赖第三方库&#xff1b; 使用语言&#xff1a;beanshell脚本语言&#xff0c;java语言 使用工具&#xff1a;idea jmeter metersphere 1.首…

设计模式面试

C 面向对象设计 封装&#xff1a;隐藏内部实现继承&#xff1a;复用现有代码多态&#xff1a;改写对象行为 设计模式关键在于分解和抽象; 设计模式的主要目的是易于变化 面向对象设计原则–比设计模式更加重要 违背了设计原则&#xff0c;设计模式是错误的。 依赖倒置原则…

LeetCode+ 56 - 60

合并区间 双指针算法、位运算、离散化、区间合并_小雪菜本菜的博客-CSDN博客 class Solution { public:vector<vector<int>> merge(vector<vector<int>>& a) {vector<vector<int>> res;if(a.empty()) return res;sort(a.begin(),a.en…

SQL Server的彻底卸载的方式

这篇文章主要介绍了SQL Server的彻底卸载的方式&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助。如有错误或未考虑完全的地方&#xff0c;望不吝赐教 SQL Server的彻底卸载与再次安装 可能大家已经有深刻体会&#xff0c;SQL Server的卸载十分繁琐。最让人头…

第 379 场 LeetCode 周赛题解

A 对角线最长的矩形的面积 模拟 class Solution { public:int areaOfMaxDiagonal(vector<vector<int>> &dimensions) {int res 0, len2 0;for (auto &x: dimensions)if (x[0] * x[0] x[1] * x[1] > len2 || x[0] * x[0] x[1] * x[1] len2 &&am…

MySQL篇—通过Clone插件进行本地克隆数据(第二篇,总共三篇)

在上一篇文章中&#xff0c;我们深入探讨了Clone技术的多种用途&#xff0c;以及使用它所需满足的前提条件。我们也详细分析了Clone存在的限制&#xff0c;并深入了解了其背后的备份原理。今天&#xff0c;我们将继续探索MySQL Clone Plugin的强大功能&#xff0c;Clone其实最重…

盲盒小程序为什么发展这么快?盲盒商家的“春天”来了?

近几年&#xff0c;潮玩文化逐渐兴起&#xff0c;在市场上引起了人们的关注。其中盲盒更是深受大众喜爱&#xff0c;盲盒通过品牌IP&#xff0c;吸引了无数的年轻人。随着时间的推移&#xff0c;盲盒市场的需求不断增长&#xff0c;这一领域成为了资本市场的“新宠”&#xff0…

清水模板厂家专供 — 易脱模,不翘曲

在现代建筑施工中&#xff0c;清水模板的选择对于实现优质建筑表面尤为关键。我们专供的清水模板&#xff0c;凭借其易脱模和不翘曲的特性&#xff0c;为建筑项目提供了理想的解决方案。 产品特点 易脱模性能&#xff1a;我们的清水模板表面光滑细腻&#xff0c;经过特殊处理…

csv文件查找工具(一)

自己写的小工具&#xff0c;查询csv文件前三列的数据互查&#xff0c; 主要目的是 组sql 需要这三个数据互查&#xff0c; 当然从数据库查的更快&#xff0c; 但数据库的连接需要验证权限&#xff0c;能自己搞&#xff0c;先自己搞 速度待优化&#xff0c;没时间搞了&#xff0…

tiktok_浅谈hook ios之发包x-ss-stub

frida-trace ios手机一部&#xff0c;需要越狱的电脑一台idacrackerXI 目标app&#xff1a; ipa 包&#xff0c;点击前往 密码&#xff1a;8urs 协议分析起始从抓包开始&#xff0c;个人习惯 一般安卓逆向可以直接搜关键词&#xff0c;但是ios 都在 Mach-O binary (reverse…

微信小程序rsa加密

没有使用npm下载依赖的方式&#xff0c;直接引入了rsa.js文件&#xff0c;rsa.js文件在后面&#xff0c;目录结构如下&#xff1a; 在index.js文件引用 import { proxyInstance, backendUrl } from ../../util/request.js; import JSEncrypt from ./rsa.js const key -----BE…