【web】springboot3 生成本地文件 url

news2024/11/19 4:40:26

文章目录

  • 流程
  • 效果
  • 静态资源访问
  • 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 {
        @Autowired
        FileUploadConfig uploadConfig;
    
        @Override
        public 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 {
	// 获取图像 Url
    public 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 {
        @Autowired
        FileUploadConfig uploadConfig;
    
        @Autowired
        IUserService userService;
    
    	// 路径拼接
        @Override
        public 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
        @Override
        public Result<String> getImageUrl(User user, String host, int port) {
        	// 用户头像的文件名唯一,并保存在了数据库中,avatar = xxx.png
            String 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 {
    @Autowired
    FileService 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() 获取请求 端口号,如 8080
        return fileService.getImageUrl(user, currentUri.getHost(), currentUri.getPort());
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java SSM框架实现在线作业管理系统项目【项目源码】

基于java的SSM框架实现在线作业管理系统演示 JSP技术 JSP技术本身是一种脚本语言&#xff0c;但它的功能是十分强大的&#xff0c;因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时&#xff0c;它可以使显示逻辑和内容分开&#xff0c;这就极大的方便了运动员的需求…

2024年初会报名照片要求(必须白底哦)

24初级会计报名照片要求 近期彩色标准1寸、(白色背景)&#xff0c; jpg格式&#xff0c;大于10KB ,像素>295*413. 初级会计考试报名照片要求为本人近期正面、免冠、清晰完整的证件电子照。 初级会计报名照片应显示报考人员双肩、双耳、双眉&#xff0c;不得佩戴首饰&#xf…

基地动态|天府新区兴隆街道领导一行莅临天府锋巢直播产业基地考察交流

11月30日&#xff0c;天府新区兴隆街道党工委委员周杰、兴隆街道营商环境办主任章瑞芸、兴隆湖社区党委书记等领导一行莅临天府锋巢直播产业基地考察交流。天府锋巢直播产业基地运营团队、招商代表、入驻企业代表陪同参与。 考察中&#xff0c;基地运营团队向天府新区兴隆街道领…

打破硬件壁垒:TVM 助力 AI技术跨平台部署

文章目录 《TVM编译器原理与实践》编辑推荐内容简介作者简介目录前言/序言获取方式 随着人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;在全世界信息产业中的广泛应用&#xff0c;深度学习模型已经成为推动AI技术革命的关键。TensorFlow、PyTorch、MX…

codeblock如何使用

codeblock 使用的codeblock20.03版本&#xff0c;功能简介如下 settings&#xff0c; 全局设置compiler和debugger的配置 build option&#xff0c;项目右键配置项目编译属性 debugger,gdb调试路径不能包含中文或者空格 问题 不能调试的问题 编译代码-g参数输出调试符号重…

python tcp socket中实现SSL/TLS认证

SSL/TLS介绍 官话说SSL是安全套接层(secure sockets layer)&#xff0c;TLS是SSL的继任者&#xff0c;叫传输层安全(transport layer security)。 说白点&#xff0c;就是在明文的上层和TCP层之间加上一层加密&#xff0c;这样就保证上层信息传输的安全。如HTTP协议是明文传输…

get_reg_by_offset函数

get_reg_by_offset函数如下&#xff1a; 在建立了寄存器模型后&#xff0c;可以直接通过层次引用的方式访问寄存器&#xff1a; rm.invert.read(...); 但是出于某些原因&#xff0c;如果依然要使用地址来访问寄存器模型&#xff0c;那么此时可以使用get_reg_by_offset函数通过…

载誉前行!科士达新能源荣获光能杯卓越解决方案奖项

1月10日&#xff0c;由索比光伏网主办的“光能杯”光伏行业颁奖典礼在苏州隆重举行&#xff0c;科士达新能源凭借深厚的技术实力、强大的创新力、优质的产品及解决方案、丰富的项目经验等&#xff0c;斩获“卓越光储充一体化解决方案“殊荣。 作为智慧能源领域全场景解决方案供…

IDEA创建springboot+mybatis项目(java8 和java21可行)

IDEA创建springbootmybatis项目&#xff08;java8 和java21可行&#xff09; 今天博主讲一下&#xff0c;IDEA创建springbootmybatis项目的文章。 步骤分别是如下几步&#xff1a; 1. 创建maven项目 2. 配置pom.xml文件 3. 创建目录结构 4. 创建配置项目文件 5. 生成创建…

debug之pycharm调试:出现Collecting data......

pycharm调试时&#xff0c;出现Collecting data… 一直在这个界面很久&#xff0c;这是新版本的Pycharm的bug&#xff0c;通常在多线程的情况下发生。 解决方法&#xff1a; File->Setting->Build,Execution,Deployment->Python Debugger。把Gevent compatible勾选…

Scrapy框架自学

配置国内镜像源 # pip设置配置 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip config set trusted-host pypi.tuna.tsinghua.edu.cn创建虚拟环境 # 使用conda创建虚拟环境&#xff08;具体内容请参考课件&#xff09; conda create -n py_s…

基于ssm的社区流浪动物救助领养系统的设计与开发+vue论文

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;流浪动物信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足…

D1302 高性能、低功耗并附带RAM的涓流充电实时时钟电路芯片

D1302是一块高性能、低功耗并附带RAM的涓流充电实时时钟电路。 主要特点&#xff1a; ● 实时时钟可提供秒、 分、小时、星期、日期、月 份和年等计时数据&#xff0c;到2100 年止。一个月小于31天时可自动调整&#xff0c;且具有闰年补偿功能 ● 31X8 位通用暂存RAM ● 采用…

下一代 Vue3 Devtools 正式开源

什么是 Vue DevTools Vue DevTools 是一个旨在增强 Vue 开发人员体验的工具,它提供了一些功能来帮助开发者更好地了解 Vue 应用程序。 Vue DevTools:Unleash Vue Developer Experience. Enhance your Vue development journey with an amazing experience! 典型的功能特征包…

艾瑞报告:HR数字化需关注体系化能力,红海云等标杆厂商引领一体化趋势

新全球化时代背景下&#xff0c;企业经营所面临的国内外环境的不确定性增强&#xff0c;如何从不确定性中找到确定性成了大多数企业的关注要点。近日&#xff0c;艾瑞咨询发布《2023中国人力资源数字化研究报告》&#xff0c;从数字化转型的角度切入&#xff0c;探讨数字化如何…

山海鲸:助力企业实现内外数据整合与价值挖掘

作为山海鲸的开发者&#xff0c;我们深知数字化转型对于企业发展的重要性。在不断钻研如何提升山海鲸可视化这款免费产品的实用性同时&#xff0c;也在不断推出各行实用解决方案&#xff0c;本文将介绍山海鲸企业数字化转型发展解决方案&#xff0c;探讨如何通过数据驱动创新&a…

移动端开发进阶之蓝牙通讯(一)

移动端开发进阶之蓝牙通讯&#xff08;一&#xff09; 移动端进阶之蓝牙通讯需要综合考虑蓝牙版本选择、协议栈使用、服务匹配、设备连接、安全性和硬件支持等方面。 一、蓝牙版本选择 根据实际需求和应用场景选择合适的蓝牙版本&#xff1b; 1.0&#xff0c;1M/s。 2.0EDR…

目标识别跟踪模块Tofu3

Tofu系列提供了适应不同目标、不同速率的识别跟踪模块产品系列&#xff0c;主要包括Tofu3&#xff0c;4&#xff0c;5&#xff0c;S和其他零配件&#xff0c;可以适配BT.656,Cameralink&#xff0c;网络等不同接口和协议的热红外、可见光视频。 Tofu3 是多波段视频物体识别跟踪…

idea安装go

1.根据系统平台&#xff0c;下载安装Go&#xff1a; 知乎 - 安全中心 2.windows系统&#xff0c;下载安装MinGW(gcc)&#xff1a; 知乎 - 安全中心 3.安装后cmd输入一下 go env 4.代理设置 go env -w GOPROXYhttps://goproxy.cn,direct 5.idea插件安装 file->setti…

龙蜥操作系统上安装MySQL:步骤详解与常见问题解决

目录 博客前言 一.下载MySQL 1.官网下载 2.上传文件到龙蜥操作系统中 ​编辑二.安装MySQL 1.检查操作系统中的默认数据库并移除 2.创建文件夹解压 3.开始安装 4.启动服务 ​编辑 5.登录修改密码&#xff0c;进行授权 三.第三方工具连接&#xff08;naviact&#xff…