OSS路径转换
大约 2 分钟约 650 字
OSS图片路径截取
组件名称:blade-oss-path-convert-spring-boot-starter
为了考虑到拓展性问题,未来OSS域名可能会发生切换,或者文件提供商可能需要进行拓展或切换。例如,当前使用阿里云OSS产品,为了防止容灾,可能需要在七牛云上存储一套数据。如果域名都是写死到数据库中,那么后期迁移的工作量将非常大,这对拓展性非常不利。
主要功能
- OSS文件路径存入数据库之前进行域名截取
- 查询数据库OSS文件返回前端时进行域名拼接
依赖
Gradle
implementation(commonLibs.blade.oss.path.convert.spring.boot.starter)Maven
<dependency>
<groupId>team.aikero.blade</groupId>
<artifactId>blade-oss-path-convert-spring-boot-starter</artifactId>
</dependency>使用
打上注解
在序列化时,需要将OSS文件路径与域名拼接并返回给前端。在反序列化时,通过在实体类的字段上打上注解@ConvertOssPath 来实现截取带有域名的URL并获取文件路径,例如:
@ConvertOssPath
var ossPath: String? = null支持的数据类型:
- String
- List
- Collection
- String[]
支持的数据格式:
- /tiangong_4627be676a3242ccbc61b04e5af5fe72.png
- /tiangong_4627be676a3242ccbc61b04e5af5fe72.png,/tiangong_4627be676a3242ccbc61b04e5af5fe72.png
配置
默认配置
@ConstructorBinding
data class OssPattern(
/**
* oss服务器域名匹配正则
*/
val pattern: String = "((http(s)?://[a-z\\\\.\\-]{1,32}\\.[a-z\\\\.\\-]{2,})([A-Za-z0-9/\\-]*))?(/\\w+)+(\\.([a-zA-Z0-9]){3,7}){1}",
/**
* oss服务器域名
*/
val domain: String = "https://oss.yunbanfang.cn"
)自定义配置
如果自定义配置的正则和域名不符合要求,可以在application.yml中进行配置。Blade会自动将其注入到OssPathResolver 中,可以配置多个规则,并且会按顺序进行匹配。当匹配到第一个规则时,会处理相关逻辑。配置格式如下:
# 可以配置多个规则
blade:
oss:
path-convert:
nodes:
- pattern: ((http(s)?://[a-z\\.\-]{1,32}\.[a-z\\.\-]{2,})([A-Za-z0-9/\-]*))?(/\w+)+(\.([a-zA-Z0-9]){3,7}){1}
domain: https://oss.yunbanfang.cn
- pattern: ((http(s)?://[a-z\\.\-]{1,32}\.[a-z\\.\-]{2,})([A-Za-z0-9/\-]*))?(/\w+)+(\.([a-zA-Z0-9]){3,7}){1}
domain: https://oss.tiangong.site注意事项
默认支持的是针对API接口的操作生效,如果在其他场景下需要针对这类操作的,可以使用OssPathResolver工具类进行手动转换。
// ossProperties可自定义也可从spring上下文获取
val removeDomain = OssPathResolver.removeDomain(ossProperties, "https://oss.yunbanfang.cn/aaa/bbb/ccc/ddd.jpg")
// ossProperties可自定义也可从spring上下文获取
val dbPath = "/tiangong_4627be676a3242ccbc61b04e5af5fe72.png"
val ossPath = OssPathResolver.appendDomain(ossProperties, dbPath)