【web】springboot3 生成本地文件 url

文章目录

  • 流程
  • 效果
  • 静态资源访问
  • Service
  • ServiceImpl
  • Controller

流程

  • avatar_dir:请求图片在服务端的存放路径
  • user.dir:项目根目录
    在这里插入图片描述

效果

在这里插入图片描述

静态资源访问

在这里插入图片描述

  1. application.yml
    设置静态文件存储路径
    custom:upload:avatar_dir: ${user.dir}/avatar_dir/avatar_dir_name: avatar_dir
    
  2. FileUploadConfig
    application.yml 信息读取配置类
    @Data
    @Configuration
    @ConfigurationProperties(prefix = "custom.upload")
    public class FileUploadConfig {private String avatarDir;private String avatarDirName;
    }
    
  3. 静态资源访问配置类
    @Configuration
    public class WebConfig implements WebMvcConfigurer {@AutowiredFileUploadConfig uploadConfig;@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {File file = new File(uploadConfig.getAvatarDir());String path = "file:" + file + File.separator;// 匹配 http://ip:port/avatar_dir/ 下的所有文件registry.addResourceHandler("/avatar_dir/**")// 实际静态文件地址.addResourceLocations(path);}
    }
    

Service

@Service
public interface FileService {// 获取图像 Urlpublic Result<String> getImageUrl(User user, String host, int port);// 路径拼接public String joinPaths(String... paths);
}

ServiceImpl

  • http://ip:port/静态文件存储路径/文件名
    String imageUrl = String.format("http://%s:%d/%s", host, port, joinPaths(uploadConfig.getAvatarDirName(), avatar)
    );
    
  • 实现代码
    @Service
    public class FileServiceImpl implements FileService {@AutowiredFileUploadConfig uploadConfig;@AutowiredIUserService userService;// 路径拼接@Overridepublic String joinPaths(String... paths) {Path resultPath = Paths.get("");for (String path : paths) {resultPath = resultPath.resolve(path);}return resultPath.toString();}// 判断文件是否存在private Boolean isUserAvatarExists(String avatar) {String path = joinPaths(uploadConfig.getAvatarDir(), avatar);File filePath = new File(path);return filePath.exists();}// 获取图像 Url@Overridepublic Result<String> getImageUrl(User user, String host, int port) {// 用户头像的文件名唯一,并保存在了数据库中,avatar = xxx.pngString avatar = this.userService.getById(user.getUserId()).getAvatar();if (isUserAvatarExists(avatar)) {String imageUrl = String.format("http://%s:%d/%s", host, port, joinPaths(uploadConfig.getAvatarDirName(), avatar));return Result.successfulResult("获取成功", imageUrl);}return Result.errorResult("文件丢失");}
    }
    

Controller

@Tag(name = "文件上传接口")
@RestController
@RequestMapping("/sign/file")
public class FileUploadController {@AutowiredFileService fileService;@Operation(summary = "获取图片 URL")@PostMapping("/image/get")public Result<String> getImageUrl(@RequestBody User user) {URI currentUri = ServletUriComponentsBuilder.fromCurrentRequestUri().build().toUri();// currentUri.getHost() 获取请求 IP,如 localhost// currentUri.getPort() 获取请求 端口号,如 8080return fileService.getImageUrl(user, currentUri.getHost(), currentUri.getPort());}
}

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

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

相关文章

GO语言笔记2-变量与基本数据类型

变量使用步骤 声明赋值使用 package main import "fmt" func main(){var age int //声明一个 int类型的变量叫ageage 18 //给变量用 赋值fmt.Println(age) //使用变量 输出变量的值 } 编译运行输出变量值 变量的四种使用方式 package main import "fmt&q…

金和OA C6 HomeService.asmx SQL注入漏洞复现

0x01 产品简介 金和网络是专业信息化服务商,为城市监管部门提供了互联网+监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 0x02 漏洞概述 金和OA C6 HomeService.asmx接口处存在SQL注入漏洞,攻击者除了可以利用 SQL 注入漏洞…

MiniTab的正态性检验结果的分析

正态性检验概述 可使用 正态性检验 确定数据是否不服从正态分布。 执行菜单&#xff1a;要执行正态性检验&#xff0c;请选择统计 > 基本统计 > 正态性检验。 正态性检验 的假设 对于正态性检验&#xff0c;进行如下假设。 H0&#xff1a;数据服从正态分布。H1&…

【VUE】无法加载文件 \node\vue.ps1,因为在此系统上禁止运行脚本。问题解决

问题描述 在VS Code中输入vue create -p dcloudio/uni-preset-vue uniapp-demo命令时报错 无法加载文件 D:\address\node\vue.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Executi…

数据结构之B树和B+树

数据结构可视化演示链接&#xff0c;也就是视频中的网址 文章目录 一、B-Tree二、BTree(B-Tree变种) 一、B-Tree 样例图 叶节点具有相同的深度&#xff0c;叶节点的指针为空所有索引元素不重复节点中的数据索引从左到右递增排列 二、BTree(B-Tree变种) 样例图 非叶子节…

水文模型(科普类)

SWMM 模型概况&#xff1a; SWMM5 系列拥有编辑区域数据的功能&#xff0c;而且能模拟水文、 水力和水质。其核心部分是管道汇流计算模块&#xff0c;提供了恒定流法、运动波法和动力波法三种水动力学 方法。其中动力波法通过求解完整的圣维南方 程组进行计算&#xff0c;能够…

【代码随想录】刷题笔记Day48

前言 早上练车去了&#xff08;好久没有8点前醒了&#xff09;&#xff0c;练科目二两小时下来脚根可真酸啊&#xff0c;希望下周一把过。练完顺带去Apple西湖免费换新了耳机&#xff0c;羊毛爽&#xff01; 121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09;…

三分钟轻松搞懂 HashMap 死循环问题!

三分钟轻松搞懂 HashMap 死循环问题&#xff01; HashMap 死循环发生在 JDK 1.7 版本中&#xff0c;形成死循环的原因是 HashMap 在 JDK 1.7 使用的是头插法&#xff0c;头插法 链表 多线程并发 HashMap 扩容&#xff0c;这几个点加在一起就形成了 HashMap 的死循环。 前置…

考虑柔性负荷的综合能源系统低碳经济优化调度【复现】

随着低碳发展进程的不断推进&#xff0c;综合能源系统&#xff08;IES&#xff09;逐渐成为实现减排目标的重要支撑技术。 基于能 源集线器概念&#xff0c;结合需求侧柔性负荷的可平移、可转移、可削减特性&#xff0c;构建了含风光储、燃气轮机、柔性负荷等 在内的 IES 模型。…

Java中SpringBoot组件集成接入【MQTT中间件】

Java中SpringBoot组件集成接入【MQTT中间件】 1.MQTT介绍2.搭建MQTT服务器1.Windows2.Ubuntu3.Docker4.其他方式3.mqtt可视化客户端MQTTX及快速使用教程4.SpringBoot接入MQTT1、maven依赖2、MQTT配置3、MQTT组件具体代码1.定义通道名字2.消息发布器3.MQTT配置、生产者、消费者4…

算法回忆录——排序

文章目录 1. 插入排序2. 选择排序3. 冒泡排序4. 希尔排序5. 归并排序6. 快速排序7. 堆排序8. 计数排序9. 桶排序10. 基数排序 1. 插入排序 分为两个序列&#xff0c;前面一个序列是排好序的&#xff0c;后面一个序列是未排好的。未排好的序列的第一个元素&#xff08;a&#x…

Vmware安装Windows11系统及下载MySQL步骤(超详细)

一、创建虚拟机 ①选择自定义 ②直接点击下一步 ③选择Windows 11 x64 ④命名虚拟机以及选择路径 ⑤新版本的虚拟机需要加密&#xff08;密码需要8个字符以上&#xff09; ⑥选择UEFI ⑦处理器配置&#xff08;根据自己的需求&#xff09; ⑧设置虚拟机的内存 ⑨选择不使用网络…

Linux安装JDK和Maven并配置环境变量

文章目录 一、安装JDK并配置环境变量二、安装maven并配置环境变量 一、安装JDK并配置环境变量 将JDK的安装包上传到Linux系统的usr/local目录 使用xftp上传文件 解压JDK的压缩包 xshell连接到云主机 [roottheo ~]# cd /usr/local[roottheo local]# ls aegis apache-tomcat-…

【Docker基础三】Docker安装Redis

下载镜像 根据自己需要下载指定版本镜像&#xff0c;所有版本看这&#xff1a;Index of /releases/ (redis.io) 或 https://hub.docker.com/_/redis # 下载指定版本redis镜像 docker pull redis:7.2.0 # 查看镜像是否下载成功 docker images 创建挂载目录 # 宿主机上创建挂…

2024年跨境电商上半年营销日历,建议收藏

2024年伊始&#xff0c;跨境电商开启新一轮的营销竞技&#xff0c;那么首先需要客户需求&#xff0c;节假日与用户需求息息相关&#xff0c;那么接下来小编为大家整理2024上半年海外都有哪些节日和假期&#xff1f;跨境卖家如何见针对营销日历选品&#xff0c;助力卖家把握2024…

Wrk压测发送Post请求的正确姿势

一、Wrk简介 wrk 是一个能够在单个多核 CPU 上产生显著负载的现代 HTTP 基准测试工具。它采用了多线程设计&#xff0c;并使用了像 epoll 和 kqueue 这样的可扩展事件通知机制。此外&#xff0c;用户可以指定 LuaJIT 脚本来完成 HTTP 请求生成、响应处理和自定义报告等功能。 …

OpenAI ChatGPT-4开发笔记2024-03:Chat之Tool和Tool_Call(含前function call)

Updates on Function Calling were a major highlight at OpenAI DevDay. In another world,原来的function call都不再正常工作了&#xff0c;必须全部重写。 function和function call全部由tool和tool_choice取代。2023年11月之前关于function call的代码都准备翘翘。 干嘛…

CSS 实现两个圆圈重叠部分颜色不同

这是期望实现的效果&#xff0c;由图可知&#xff0c;圆圈底图透明度是0.4&#xff0c;左侧要求重叠部分透明度是0.7&#xff0c;所以不能通过简单的透明度叠加来实现最右侧的效果。 这就需要另外新建一个图层来叠加在两个圆圈重叠上方。 直接看代码 .circle_hight {width: 1…

MySQL深入——9

如何正确的显示随机信息&#xff1f; 我们来模拟在英语单词app当中随机出现三个英语单词的情况&#xff0c;我们首先创建一张表words&#xff0c;然后给这个表当中插入10000条信息进行量化。 select word from words order by rand() limit 3&#xff1b; order by rand&…

外包做了1个月,技术退步一大半了。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;20年通过校招进入深圳某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…