配置springboot的静态资源访问地址为本机,并使用docker部署

news2024/11/18 23:32:58
  1. springboot版本 2.7.4
  2. 开发工具 IDEA 2021.2.4

1. SpringBoot提供的默认静态资源访问方法

resouces目录下的

/static、 /public、 /resouces、 /META-INF/resouces、

这四个目录下放置的静态资源都可以通过直接通过以下链接访问

http://localhost:8080/aaa.png

在这里插入图片描述

2. 将SpringBoot静态资源访问路径配置到本机地址

一般我们都要将程序打包部署到服务器上,可能并不想使用springboot提供的默认的静态资源目录,想将服务的某个目录设为静态资源目录,如服务器的 /root/abc/static,可以进行如下配置

2.1 在配置文件中(application.yml文件)填写的路径和访问前缀

save-path 和 mapping-path 中最后的 / 一定不能少!

image:
  save-path: /root/static/ # 图片存储路径
  mapping-path: /img/ # 图片的 RequestMapping 的路径

save-path 和 mapping-path 中最后的 / 一定不能少!(在啰嗦一遍)
mapping-path 指的是最后通过url访问静态资源的时候所需要加的前缀
例如
http://localhost:8080/img/aaa.png

2.2 更改springboot拦截器

在以下位置创建java文件(文件位置其实是可以任意的)
在这里插入图片描述

MyWebAppConfiguration文件

package com.atguigu.mybatisplus.config;


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

@Configuration
public class MyWebAppConfiguration implements WebMvcConfigurer {
//    @Value("${upload.file.location}")
//    private String fileLocation;
//    @Value("${upload.file.path}")
//    private String filePath;

    @Value("${image.save-path}")
    private String imageSavePath;
    /***图标映射路径*/
    @Value("${image.mapping-path}")
    private String imageMappingPath;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(imageMappingPath + "**").addResourceLocations("file:" + imageSavePath);
    }

}

2.3 配置文件上传接口

@Controller
@RestController
@RequestMapping("/mybatisplus/user")
public class UserController {
    /*** 图片存储路径 */
    @Value("${image.save-path}")
    private String imageSavePath;
    /*** 图片映射路径 */
    @Value("${image.mapping-path}")
    private String imageMappingPath;

    @PostMapping("/upload")
    public String upload(@RequestParam("file") MultipartFile fileUpload) {
        //获取文件名
        String fileName = fileUpload.getOriginalFilename();
        //获取文件后缀名。也可以在这里添加判断语句,规定特定格式的图片才能上传,否则拒绝保存。
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        //为了避免发生图片替换,这里使用了文件名重新生成
        fileName = UUID.randomUUID() + suffixName;
        try {
            // 将图片保存到文件夹里
            fileUpload.transferTo(new File(imageSavePath + fileName));
            // 返回文件 Mapping 路径,使用 http://IP:端口/下面返回的路径 ,即可在网页中查看图片
            return imageMappingPath + fileName;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

}

3.将项目部署到服务器的docker中

在这里插入图片描述
docker本身也可以理解成是运行在服务器上的服务器(如上图所示),它在运行时有自己的内部环境,若将静态资源直接放在docker中,那么存储在docker中的资源会随着容器的销毁而销毁,因此需要进行docker的文件映射,将docker的 /root/static 映射到服务器的 /root/abc/static中, 相当于创建了一个共享文件夹,这样当容器销毁时,里面的文件依然会在 本机的 /root/abc/static中保留。

关于docker的静态资源映射,可以在创建容器的时候进行设置

docker-compose.yml文件

version: '2'
services:
  xz-platform:
    build:
      context: .
    restart: always
    ports:
      - 10204:8080
    volumes:
      - /root/xz-platform/static:/root/static  # 在这里做的映射,前面的地址是本机地址,后面的地址是容器的地址,顺序不要弄混
    container_name: xz-platform
    hostname: xz-platform
    image: xz-platform

PS:

  1. 容器内部的 /root/static文件夹是默认存在的,不需要进入手动创建
  2. 进入运行springboot项目的容器内部的指令为
docker exec -it 容器id sh

使用

docker exec -it 容器id bash

docker exec -it 容器id /bin/bash

都是不行的

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

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

相关文章

入门力扣自学笔记256 C++ (题目编号:1019)

1019. 链表中的下一个更大节点 题目: 给定一个长度为 n 的链表 head 对于列表中的每个节点,查找下一个 更大节点 的值。也就是说,对于每个节点,找到它旁边的第一个节点的值,这个节点的值 严格大于 它的值。 返回一…

C++中COM组件管理思想实践

在开发一个产品时,其往往有很多子模块,子业务和子功能,这些都可以抽象成组件(C中本质表现就是一个类)。但是如何更好的管理这些类的对象呢?我们可以借鉴微软的COM组件思想来进行对象的注册,创建…

OpenHarmony标准系统开机时长优化

简介 万物互联时代,产品性能至关重要,而系统启动时间是系统性能的重要组成部分,因为用户必须等待系统启动完成后才能使用设备。对于经常需要进行冷启动的汽车等设备而言,较短的启动时间至关重要(没有人喜欢在等待几十秒…

如何手写一个文件索引工具everything(第一章)

第一章(NTFS格式及USN日志) 背景介绍 Windows平台的Everything文件查找速度非常快,优势在于利用了NTFS的USN日志,以及Windows上的文件监测机制我们也可以仿照类似原理,通过查询USN日志、监测Windows平台文件修改、使…

亚马逊卖家如何用facebook推广?

亚马逊作为全球最大的电商平台之一,吸引了大量的卖家和买家。对于亚马逊的卖家而言,如何进行有效的推广和引流成为了他们最关心的问题之一。其中,利用Facebook广告为亚马逊进行推广是一种较为常见的做法。 但是,亚马逊可以用Face…

springboot实现修改用户信息功能

目录 1、UserEntity层 2、UserMapper层 3、UserService层 4、UserController类 5、Postman测试 要实现修改用户信息的功能,需要编写对应的代码: 如: 在UserEntity中定义用户实体类的属性。 在UserMapper中编写修改用户的SQL语句&#…

【C++】哈希的应用 -- 布隆过滤器

文章目录一、布隆过滤器的引入二、哈希函数个数的选择三、布隆过滤器的实现四、布隆过滤器的应用五、布隆过滤器总结一、布隆过滤器的引入 我们在上一节中学习了 位图,知道了位图可以用来快速判断某个数据是否在一个集合中,但是位图有如下的缺点&#x…

Qemu虚拟机读取物理机的物理网卡的流量信息方法

项目背景: 比如我有三个项目 A,B,C;其中A项目部署在物理机上,B,C项目部署在 虚拟机V1,V2中,三个项目接口需要相互调用。 需要解决的问题点: 1,因为A,B&#x…

2016-2017 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2016)题解

2016-2017 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2016) A - Artwork 题目描述: 给定N*M的网格,给出Q次询问,每次询问都给出一个小矩阵,保证每个矩阵要么长为1,要么宽为1,将网格中矩阵部…

最近给shopify跨境电商网站搞google搜索引擎的seo优化,整理了一些内容

接到一个网站,首先要做一些工作,然后按照这个步骤做好每一步,网站的搜索排名会有明显的效果。 对网站进行技术审核,以确保它符合搜索引擎的技术要求。研究关键词并确定目标关键词。优化网站内容,以便更好地针对目标关…

【LeetCode】剑指 Offer 55. 二叉树的深度 p271 -- Java Version

1. 题目介绍(55. 二叉树的深度 ) 面试题55:二叉树的深度, 一共分为两小题: 题目一:二叉树的深度题目二:平衡二叉树 2. 题目1:二叉树的深度 题目链接:https://leetcode.c…

简单写一个Avue增删改查

今天练习了一下avue,真的好用,个人感觉相比于用element plus的组件还方便! 简简单单的写了一个页面的增删改查,思路很简单。如果在写那种后台管理项目,基本上全是列表页,用这种方法写出来第一页&#xff0c…

收入下滑,亏损扩大的人力资源管理公司罗科仕申请纳斯达克IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,来自北京的人力资源管理公司罗科仕近期已向美国证券交易委员会(SEC)提交招股书,申请在纳斯达克IPO上市,股票代码为(LGCL) 。罗科仕计划通过此次纳斯…

算法训练第五十八天 | 739. 每日温度、496.下一个更大元素 I

单调栈part01739. 每日温度题目描述思路496.下一个更大元素 I题目描述思路739. 每日温度 题目链接:739. 每日温度 参考:https://programmercarl.com/0739.%E6%AF%8F%E6%97%A5%E6%B8%A9%E5%BA%A6.html 题目描述 请根据每日 气温 列表,重新生…

Android组件化开发

Android组件开发 一、背景 一个app随着业务增加,代码放在同一个模块中会越来越臃肿,同时也导致多人开发的一个难度。组件化可以把业务单独分出来,形成一个单独模块,可单独运行、测试等,相互之间不会影响。另外一个优…

鼎捷T100制造之工艺工单实战(其他工艺补充)

文章目录 一、网状工艺二、平行工艺三、替代工艺四、返工工艺五、无顺序工艺一、网状工艺 网状工艺类似一张网状结构。可以包含平行和线性工艺等于一体。 网状工艺: 产品结构 aeci004:建立作业 aecm200: 工艺路线维护

kubeasz搭建k8s集群-部署单节点集群(AllinOne部署)

1说明 kubeasz 致力于提供快速部署高可用k8s集群的工具, 同时也努力成为k8s实践、使用的参考书;基于二进制方式部署和利用ansible-playbook实现自动化;既提供一键安装脚本, 也可以根据安装指南分步执行安装各个组件。 kubeasz 从每一个单独部件组装到完…

太赫兹高速通信系统前端关键技术

摘要:对构成太赫兹无线系统的2 种关键电路(分谐波混频器和二倍频器)进行了深入研究。在关键电路研究取得突破的基础上,开展了太赫兹无线通信技术研究,构建了220 GHz 无线通信实验验证系统。220 GHz 实验验证系统在室外…

elasticsearch 其他字段类型详解和范例

本章主要内容 elasticsearch 中别名字段的详解和范例elasticsearch 中二进制类型的详解和范例elasticsearch 中的嵌套类型的详解和范例elasticsearch 中的范围类型的详解和范例elasticsearch 中的排名类型的详解和范例elasticsearch 中的ip类型的详解和范例elasticsearch 中的…

【网络应用开发】实验3——Web组件重用与JavaBeans

目录 Web组件重用与JavaBeans预习报告 一、实验目的 二、实验原理 三、实验预习内容 1. 静态include指令何时执行?主页面和被包含的子页面是否转换为一个转换单元? 2.动作指令何时执行?主页面和被包含的子页面是否转换为一个转换单元&a…