服务端本地图片存储 / 读取的方案

news2024/10/7 16:16:13

需求

        将前端传递过来的图片存储到项目的一个指定目录中,并且将图片在项目中的相对路径存储到数据库中存储,前端获取相对路径后可以直接访问到该图片上

技术实现:

        在SpringBoot项目中,我们可以在resource目录下创建一个 "static" 目录,在此目录下,我们可以放置图片 / HTML等静态页面,并且可以直接在浏览器上访问到,示例如下:

然后我们访问 IP:项目端口 / 项目前缀 / 从static目录开始的资源路径 就可以访问到该静态资源啦

难点1.资源热部署失败:

        现在的需求要求我们能实现一个类似于热部署的状态,就是说将图片上传保存好后,不需要重启项目重新编译加载该图片就可以直接进行访问,然而我在网上找了一些文章进行idea的项目热部署后还是无法达到预期的效果

解决:

        由于公司的项目需要部署到服务器上和前端进行交互(部署到了宝塔上),当前端上传了一张图片后,在宝塔界面的jar包目录中就会生成一个子目录

 我点开发现它的目录结构和项目的目录结构一致,并且上传的图片都一致

         在测试后发现,当我在外部浏览器直接访问该目录下的照片数据后是可以直接获取到的,那么问题就很明显了

难点2.怎么获取到jar包以外的数据?

        由于我将项目打包为jar包后,按照前面的方式,我访问到的实际上还是jar包内部的已经编译好的固定代码,但我新引进的图片实际上是存储在脱离jar包位置以外的一个子目录中,所以肯定是无法达到预期的。

解决:

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/images/**").addResourceLocations("file:pipayshop-api/src/main/resources/static/images/");
    }
}

        这段代码是一个Spring Boot的配置类,用于配置Web应用程序中的资源处理器。

        在这段代码中,WebConfig类实现了WebMvcConfigurer接口,并重写了addResourceHandlers方法。该方法用于配置静态资源的处理器。

        在这个例子中,addResourceHandlers方法注册了一个资源处理器,用于处理以"/images/"开头的URL请求。这些请求将被映射到指定的资源位置。

        具体来说,addResourceHandler("/images/**")指定了URL模式,即以"/images/"开头的所有请求。而addResourceLocations("file:pipayshop-api/src/main/resources/static/images/")指定了资源的存储位置,即在项目的pipayshop-api/src/main/resources/static/images/目录下。

        这样配置之后,当应用程序收到以"/images/"开头的URL请求时,它将会去寻找并返回对应的静态资源文件,以供客户端访问。

        这段代码的作用是将项目中指定目录下的静态图片资源映射到指定的URL路径,使得这些图片可以通过URL访问。


最终效果:

        我在前端上传了一张图片,后端处理后将该图片存储在static下的一个目录中,将该相对路径存储到数据库,查询数据的时候就直接返回该相对路径,前端直接访问 IP:项目端口 / 项目前缀 / 从static目录开始的资源路径 就可以访问到该静态资源啦

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

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

相关文章

学习网络基础No.2【深入理解TCP/IP】

引言: 北京时间:2023/8/9/13:04,昨天在摆烂中把网络基础相关知识的博客更新,依然还是上不了C站热榜,我估计是因为我账号热度不够没有上榜资格,也可能是因为前段时间没有积极更新,导致周榜被甩出…

360安全大模型发布,周鸿祎:大模型未来真正的机会在企业级市场

8月9日,三六零(601360.SH,下称“360”)集团发布了国内首个可交付的安全行业大模型——“360安全大模型”。 据介绍,360安全大模型是以360自研认知型通用大模型“360智脑”为基础,结合360过往15年AI安全应用…

nginx负载均衡与反向代理与正向代理

负载均衡:通过反向代理来实现 正向代理的配置方法。 正向代理: 工作原理:用户端直接访问不了,需要通过代理服务器来访问web服务器,用户端先访问代理服务器,再访问web服务器。web服务器响应给代理服务器&a…

nginx的location与rewrite作用与用法

nginx rewrite 重写跳转 location 匹配uri location 匹配的规则和优先级。重点 nginx常用的变量,要求掌握 rewrite:重定向功能。掌握,理解。 local location 匹配: 正则表达式: 元字符: .&#xff…

安达发|国内APS系统崛起:解析近几年火爆原因

近年来,APS(高级计划与排程)系统在国内内迅速崛起,成为企业提高生产效率和管理水平的重要工具。这一现象的背后,有多种原因共同推动着APS系统的普及和发展。 首先,技术创新是APS系统能够快速发展的关键因素。随着大数据、云计算、…

如何卸载SOLIDWORKS软件?

本文将为您提供一份简易指南,介绍如何正确卸载SOLIDWORKS软件,并分享一些注意事项,确保您的卸载过程顺利进行。 SOLIDWORKS软件作为一款强大的三维设计和工程分析工具,为许多工程师提供了优良的创作平台。然而,有时候我…

Element组件浅尝辄止4:Button组件

Button按钮组件&#xff1a;用途太广泛了&#xff0c;几乎参与到了日常开发中的方方面面 1.如何使用&#xff1f;How? //使用type、plain、round和circle属性来定义 Button 的样式。<el-row><el-button>默认按钮</el-button><el-button type"primar…

LeetCode150道面试经典题-移除元素(简单)

目录 1.题目 2.解题思路 3.解题代码 1.题目 移除元素 给你一个数组 nums 和一个值 val&#xff0c;你需要原地移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组。 元素…

mac-右键-用VSCode打开

1.点击访达&#xff0c;搜索自动操作 2.选择快速操作 3.执行shell脚本 替换代码如下&#xff1a; for f in "$" doopen -a "Visual Studio Code" "$f" donecommand s保存会出现一个弹框&#xff0c;保存为“用VSCode打开” 5.使用

Prometheus流程图(自绘)-核心组件-流程详解

阿丹手绘流程图&#xff1a;图片可能有点小查看的时候放大看看哈&#xff01; prometheus核心组件 prometheus server Prometheus Server是Prometheus组件中的核心部分&#xff0c;负责实现对监控数据的获取&#xff0c;存储以及查询。Prometheus Server可以通过静态配置管理…

Apikit 自学日记:API 异常监控-监控报告

在 api 管理中&#xff0c;查看 api 异常监控的监控报告&#xff0c;在 apikit 中也是常用的功能&#xff0c;通常你可以在流程综合报告页中看到当前流程在选定时间段内的整体监控情况... 在 APIkit 中监控报告有这几种类别&#xff1a; 单接口监控报告 流程监控报告 项目监控…

SQL注入之Oracle注入

SQL注入之Oracle注入 7.1 SQL注入之Oracle环境搭建 前言 Oracle Database&#xff0c;又名Oracle RDBMS&#xff0c;或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统…

ardupilot 三维向量如何进行旋转

目录 文章目录 目录摘要1.三维向量的旋转2.如何理解上面公式3.ardupilot中代码应用4.结论摘要 本节主要记录ardupilot中如何实现一个三维向量从一个坐标系转换到另外一个坐标系的过程,欢迎批评指正!!! 1.三维向量的旋转 这里需要特别注意,我们有时候需要把R系往B系转换,…

【C语言学习】函数的定义和调用

一、函数定义 要有返回类型、函数名和函数体 二、调用函数 函数名&#xff08;函数值&#xff09;&#xff1b; &#xff08;&#xff09;起到表示函数调用的重要作用&#xff0c;即使没有参数也需要&#xff08;&#xff09; 若有参数&#xff0c;则需要给出正确的数量和顺序…

【如何在Linux环境下进入Docker容器中的MySQL】

如何在Linux环境下进入Docker容器中的MySQL 查看所有容器 docker ps进入容器 docker exce -it {NAMES/CONTAINER ID} bash根据容器别名获取容器ID都可以进入到容器当中 3. 输入MySQL的账号和密码登录MySQL mysql -uroot -p{password}

Linux下 时间戳的转化

Linux下一般用date 记录当前时间&#xff0c;尤其是我们需要保存测试log的时候&#xff0c;或者设计一个跑多长时间的脚本都需要时间戳。下面看一下平时最常用的几种写法 1 date “%Y-%m-%d %H:%M” 显示具体时间 2 修改时间 date -s 3 date %s :当前时间的时间戳 显示具体时…

Maven介绍,部署在eclipse中

目录 一.Maven介绍 1&#xff0c;什么是maven&#xff1f; 2. 为什么maven会在企业中大量使用&#xff1f; 3.没有使用maven的前后区别? 4.maven在Java开发中的实际效果图 二.maven部署在eclipse中 1.下载maven在其官方网址下载&#xff08;当然实际下载也要根据个人的…

速度提升13%?SK海力士新一代芯片组即将发布,搭载LPDDR5T 内存

据称SK海力士最新LPDDR5T内存已在联发科的下一代移动平台&#xff08;可能是天玑9300&#xff09;上成功验证。 SK海力士宣布&#xff0c;联发科即将于今年内发布最新一代旗舰移动芯片组&#xff0c;其中包括速度高达9.6Gbps的LPDDR5T内存。与前一代海力士LPDDR5X相比&#xff…

htmlCSS-----案例展示

目录 前言 作品效果 html代码 CSS代码 图片资源 前言 在学习html过程中我们要试着去写写一些案例&#xff0c;通过这些案例让我们更加熟悉代码以及丰富我们的经验&#xff0c;下面是我个人写的一个案例&#xff0c;代码和图片也给出了大家&#xff0c;你们可以参考参考。…

TOMCAT部署及优化(Tomcat配置文件参数优化,Java虚拟机(JVM)调优)

TOMCAT tomcat &#xff1a;是一个开放源代码的web应用服务器&#xff0c;基于java代码开发的。也可以理解为tomacat就是处理动态请求和基于java代码的页面开发。可以在html当中写入java代码&#xff0c;tomcat可以解析html页面当中的java&#xff0c;执行动态请求&#xff0c;…