一、思路
- 我们定义一个接口(就比如接下来要实现的文件上传接口)
- 我们定义所需要实现的策略实现类 A、B、C、D(也就是项目中所使用的四种策略阿里云Oss上传、腾讯云Cos上传、七牛云Kodo上传、本地上传)
- 我们通过策略上下文来调用策略接口,并选择所需要使用的策略
二、策略模式的具体实现
2.1、策略接口的编写
首先我们新建一个名称为
strategy
的文件夹(在代码规范中,使用设计模式要明确的体现出来,便于后期维护)
如下就是我们的策略接口了,接下来我们去编写对应的实现类。
/**
* 上传策略
*
* @author DarkClouds
* @date 2023/05/13
*/
public interface UploadStrategy {
/**
* 上传文件
*
* @param file 文件
* @param path 上传路径
* @return {@link String} 文件地址
*/
String uploadFile(MultipartFile file, String path);
}
2.3、完善配置文件
在编写对象存储实现类之前,我门会发现一个问题。我们需要去对应的云服务厂商开通对象存储服务,然后获取到accessKey、accessKeySecret、endpoint、bucket、domainUrl等必须的参数。
因为这些信息基本是不会发生改变,所以我们可以将这些信息存储在配置文件中。
除此之外我们还需要对文件上传进行配置,设置为最大文件为100MB
server:
port: 8080
spring:
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
# 文件上传策略 local、oss、cos
upload:
strategy: oss
local:
# nginx映射本地文件路径
url: http://127.0.0.1:8800
# 本地文件存储路径
#path: /usr/local/upload
path: D:\img\upload
# oss存储
oss:
url: http://Bucket域名
endpoint: OSS配置endpoint
bucketName: OSS配置bucketName
accessKeyId: OSS配置accessKeyId
accesskeySecret: OSS配置accesskeySecret
# cos存储
cos:
url: https://Bucket域名
secretId: COS配置secretId
secretKey: COS配置secretKey
region: COS配置region
bucketName: COS配置bucketName
配置文件的格式如上,我们获取配置文件的时候可以使用@Value()的注解进行获取。
我们使用@ConfigurationProperties()的方式来获取配置文件的内容。
引入自定义配置依赖 以及 云服务依赖
<!--============== 项目版本号规定 ===============-->
<properties>
<!--============== 对象存储依赖 ==================-->
<cos.version>5.6.89</cos.version>
<kodo.version>[7.7.0, 7.10.99]</kodo.version>
<oss.version>3.15.1</oss.version>
</properties>
<dependencies>
<!-- 自定义配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<!--================== 对象存储依赖 =======================-->
<!-- 腾讯云Cos对象存储 -->
<dependency>