- springboot版本 2.7.4
- 开发工具 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:
- 容器内部的 /root/static文件夹是默认存在的,不需要进入手动创建
- 进入运行springboot项目的容器内部的指令为
docker exec -it 容器id sh
使用
docker exec -it 容器id bash
和
docker exec -it 容器id /bin/bash
都是不行的