网站设计及开发,中学生免费作文网站,外贸网站怎么做关键词,阿里云除了做网站还能用来干什么1、背景 项目上有这样一个需求#xff0c;前端传文件过来#xff0c;后端接收后按照特定格式对文件进行重命名。(修改文件名需求其实也可以在前端处理的)
//接口类似于下面这个样子
PosMapping(/uploadFile)
public R uploadFile(ListMultipartFile fil…1、背景 项目上有这样一个需求前端传文件过来后端接收后按照特定格式对文件进行重命名。(修改文件名需求其实也可以在前端处理的)
//接口类似于下面这个样子
PosMapping(/uploadFile)
public R uploadFile(ListMultipartFile fileList)
2、问题
本来以为通过set方法修改一下文件名就行但是去操作时发现MultipartFile类并没有set方法就没办法通过set直接修改文件名了。
3、解决方案 网上的解决方案基本都是从文件流下手拷贝文件流后把文件流写入新文件。 这里介绍一种新的解决方案通过反射修改MultipartFile类文件的文件名。
/*** 通过反射重命名文件名* param fileList* param name* return*/public void rename(ListMultipartFile 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参考依赖 dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.8.12/version/dependency