潘志宝
3 天以前 e14de70a3c4b393498d3e95717b19240c4426c22
提交 | 用户 | 时间
e7c126 1 package com.iailab.module.infra.framework.file.core.client;
H 2
3 import cn.hutool.core.util.StrUtil;
4 import lombok.extern.slf4j.Slf4j;
5
6 /**
7  * 文件客户端的抽象类,提供模板方法,减少子类的冗余代码
8  *
9  * @author iailab
10  */
11 @Slf4j
12 public abstract class AbstractFileClient<Config extends FileClientConfig> implements FileClient {
13
14     /**
15      * 配置编号
16      */
17     private final Long id;
18     /**
19      * 文件配置
20      */
21     protected Config config;
22
23     public AbstractFileClient(Long id, Config config) {
24         this.id = id;
25         this.config = config;
26     }
27
28     /**
29      * 初始化
30      */
31     public final void init() {
32         doInit();
33         log.debug("[init][配置({}) 初始化完成]", config);
34     }
35
36     /**
37      * 自定义初始化
38      */
39     protected abstract void doInit();
40
41     public final void refresh(Config config) {
42         // 判断是否更新
43         if (config.equals(this.config)) {
44             return;
45         }
46         log.info("[refresh][配置({})发生变化,重新初始化]", config);
47         this.config = config;
48         // 初始化
49         this.init();
50     }
51
52     @Override
53     public Long getId() {
54         return id;
55     }
56
57     /**
58      * 格式化文件的 URL 访问地址
59      * 使用场景:local、ftp、db,通过 FileController 的 getFile 来获取文件内容
60      *
61      * @param domain 自定义域名
62      * @param path 文件路径
63      * @return URL 访问地址
64      */
65     protected String formatFileUrl(String domain, String path) {
66         return StrUtil.format("{}/admin-api/infra/file/{}/get/{}", domain, getId(), path);
67     }
68
69 }