springboot网站开发解决图片存储问题,前端无法访问解决办法

最近使用springboot开发网站的时候,遇到了一个图片存储问题,我之前的方法是,把证书图片存在项目的static目录下面,这样的话,打包发布到远程服务器后,虽然可以正常展示已经打包封装好的内容,但是如果新产生的图片则是不行的!为此,我在网上搜了一下,换成另外的存储位置,采用路径映射的方式,解决了这个难题。

下面是解决思路和办法。

第一步:我们需要配置文件内添加一个路径信息:

#配置证书图片本地存储路径
file.uploadFolder=D:/zhengshu/

第二步,我们需要提前 准备好配置管理类的配置参数。

package com.example.mydemo.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    // 通过读取配置项获取的文件上传路径
    @Value("${file.uploadFolder}")
    private String basePath;


    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        /*
         * 资源映射路径
         * addResourceHandler:访问映射路径
         * addResourceLocations:资源绝对路径
         */
        registry.addResourceHandler("/zhengshu/**").addResourceLocations("file:" + basePath);
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }
}

如图,代码里加了注释,大家自己看就能看懂了。

读取配置文件的路径信息,通过一个registry的调用方法,完成了虚拟路径和实体路径的映射关系。

这样我们的网站项目,就能读取到本地物理路径内的图片信息了。

这样做可以提升安全,避开浏览器直接访问我们的本地硬盘信息。


 

如图,证书的存储物理路径,就是本地硬盘的某一个文件夹。

 

如图,前端提交的需求,接口确实正常执行了图片的创建存储操作。现在在前端是可以借助于虚拟路径正常访问这些图片的。

 

 

如图,前端浏览器可以 正常访问这些存在本地物理硬盘内的图片信息。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Deep Graph Representation Learning and Optimization for Influence Maximization

Abstract 影响力最大化(IM)被表述为从社交网络中选择一组初始用户,以最大化受影响用户的预期数量。研究人员在设计各种传统方法方面取得了巨大进展,其理论设计和性能增益已接近极限。在过去的几年里,基于学习的IM方法的…

微PE启用账号和修改密码

启动PE后,进入桌面打开运行dism程序 选择带有系统的盘符(默认选的是PE盘),然后打开会话 选择左侧工具箱,然后右侧找到账户管理 然后就可以对已有账号进行管理和清空密码了

6、kubenetes 卷

1、什么是卷 在某些场景下,我们可能希望新的容器可以在之前容器结束的位 置继续运⾏,⽐如在物理机上重启进程。可能不需要(或者不想要) 整个⽂件系统被持久化,但又希望能保存实际数据的⽬录。 Kubernetes通过定义存储…

蓝桥杯(3.21 刷真题)

P8682 [蓝桥杯 2019 省 B] 等差数列 import java.util.Arrays; import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int[] res new int[n1];for(int i1;i<n;i)res[i] sc.ne…

vue2 自定义 v-model (model选项的使用)

效果预览 model 选项的语法 每个组件上只能有一个 v-model。v-model 默认会占用名为 value 的 prop 和名为 input 的事件&#xff0c;即 model 选项的默认值为 model: {prop: "value",event: "input",},通过修改 model 选项&#xff0c;即可自定义v-model …

基于VJ算法(Viola-Jones algorithm)的人面定位算法,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

边缘自动隐藏窗体,透明度切换,同步父窗体标签切换winform

一、实现功能 默认的标签栏(superTabControl) 可以设置隐藏,即可实现全屏最大化。通过列表切换打开的标签页。用于定制B/S模式系统显示更个性,自定义样式,简介 安全 兼容性好。 二、主要代码 private void Time_Tick(object sender, EventArgs e) {获取主屏

停止docker 容器并删除对应镜像

docker 容器相关命令 docker ps 查看当前系统正在运行的容器情况&#xff0c;返回信息分别为&#xff1a; 容器ID&#xff1a;CONTAINER ID 镜像名IMAGE NAMES 运行命令COMMAND 创建时间CREATED 状态STATUS 映射端口 PORTS docker ps |grep XXX 可以…

Rust基本类型

数值类型 整数类型 无符号整数只能取正数和0&#xff0c;有符号整数可以取正数负数和0。isize和usize类型取决于程序运行的计算机CPU类型&#xff0c;若CPU是32位的&#xff0c;则这两个类型是32位的&#xff0c;若CPU是64位的&#xff0c;则它们是64位的。rust整型 默认使用…

vue/uniapp项目把public下的静态资源打包进dist目录

vue-cli包装的uniapp项目&#xff0c;需要把public下的静态资源打包进dist目录下&#xff0c; 如下图所示 解决方法&#xff1a; 安装依赖&#xff1a;yarn add copy-webpack-plugin -D;根路径新建vue.config.js文件 vue.config.js配置如下&#xff1a; const CopyPlugin …

手机如何设置静态IP地址显示

随着移动互联网的普及&#xff0c;手机已经成为我们日常生活中不可或缺的一部分。在连接无线网络时&#xff0c;我们有时需要设置手机的IP地址为静态&#xff0c;以满足特定的网络需求或解决某些网络问题。本文将指导您如何在手机上设置静态IP地址显示&#xff0c;让您更好地管…

C++语言学习(二)—— C++语言的基本知识

目录 一、面向对象的三个核心概念 二、C语言中的I/O口 三、C语言中的数据类型​​​​​​​ 3.1 逻辑类型 3.2 引用类型 3.2.1 引用作为函数参数 3.2.2 引用作为函数返回值 3.2.3 引用作为类成员 3.3 类类型 四、 C语言中的内联函数 五、 函数重载 六、 带默认形参…

【C++】狗屁不通文章生成器2.0

【C】狗屁不通文章生成器2.0 1 前言2 改进2.1 字词的前后关系2.2 文章生成系统 3 实现(部分)3.1 class wordpair3.1.1 转化为 json3.1.2 添加后缀词3.1.3 选择后缀词 3.2 class createArticle3.2.1文本分割3.2.2生成文章 4演示4.1 wordpair(3x2), 启动词(春天)4.2 wordpair(2x1…

2024.3.24 机器学习周报

目录 引言 Abstract 一、文献阅读 1、题目 2、引言 3、创新点 4、模型架构 4.1 Encoder and Decoder Stacks 4.2 Attention—注意力机制 5、实验 6、结果 二、Self-attention 1、什么是self-attention 2、例子&#xff08;x2→z2&#xff09; 3、矩阵批量处理 …

Linux--进程(1)

目录 前言 1.冯诺依曼体系结构 2. 操作系统(Operator System)--第一个被加载的软件 3.进程 3.1基本概念 3.2Linux中的PCB 3.3通过系统调用创建子进程-fork初识 fork&#xff1a;创建一个子进程 为什么要创建子进程&#xff1f; fork的原理&#xff1a; 进一步了解fo…

【Linux】调试器-gdb的使用说明(调试器的配置,指令说明,调试过程说明)

目录 00.背景 01.安装 02.生成调试信息 03.调试过程 00.背景 在软件开发中&#xff0c;通常会为程序构建两种不同的版本&#xff1a;Debug模式和Release模式。它们之间的区别主要在于优化级别、调试信息、错误检查等方面&#xff1a; 1.Debug 模式&#xff1a; 优化级别低…

灵境矩阵平台x百度---智能体(一)

什么是数据插件 大模型插件:大语言模型插件是随着大语言模型发展而诞生的全新插件。大语言模型插件的核心是Web API独立于大语言模型&#xff0c;插件开发过程不受大语言模型的约束&#xff0c;同时没有开发语言的限制&#xff0c;更加通用&#xff0c;只要WebAPI遵循RESTfuI相…

如何在 Odoo 17 的 齿轮菜单⚙️ 中添加新菜单

在 Odoo 中&#xff0c;齿轮菜单是一个重要组件&#xff0c;允许用户访问与系统内不同模型和功能相关的各种配置选项和设置。它通常由位于用户界面左上角的齿轮或齿轮图标表示。下图显示了 "sale.order "模型的齿轮菜单。 默认情况下&#xff0c;我们在 CogMenu 中提…

js 实现动画的两种方案对比:setTimeout vs RAF (requestAnimationFrame)

setTimeout 需手动控制频率&#xff0c;页面隐藏后仍会执行动画&#xff0c;更加耗费性能。 requestAnimationFrame 简称 RAF , 会在浏览器中每次刷新屏幕时调用一个函数&#xff0c;用于创建平滑的动画&#xff0c;因为它会自动适应屏幕的刷新率&#xff0c;无需手动控制频率。…

实战whisper语音识别第一天,部署服务器,可远程访问,实时语音转文字(全部代码和详细部署步骤)

Whisper是OpenAI于2022年发布的一个开源深度学习模型&#xff0c;专门用于语音识别任务。它能够将音频转换成文字&#xff0c;支持多种语言的识别&#xff0c;包括但不限于英语、中文、西班牙语等。Whisper模型的特点是它在多种不同的音频条件下&#xff08;如不同的背景噪声水…