package com.iailab.module.infra.framework.file.core.client;
|
|
import cn.hutool.core.util.StrUtil;
|
import lombok.extern.slf4j.Slf4j;
|
|
/**
|
* 文件客户端的抽象类,提供模板方法,减少子类的冗余代码
|
*
|
* @author iailab
|
*/
|
@Slf4j
|
public abstract class AbstractFileClient<Config extends FileClientConfig> implements FileClient {
|
|
/**
|
* 配置编号
|
*/
|
private final Long id;
|
/**
|
* 文件配置
|
*/
|
protected Config config;
|
|
public AbstractFileClient(Long id, Config config) {
|
this.id = id;
|
this.config = config;
|
}
|
|
/**
|
* 初始化
|
*/
|
public final void init() {
|
doInit();
|
log.debug("[init][配置({}) 初始化完成]", config);
|
}
|
|
/**
|
* 自定义初始化
|
*/
|
protected abstract void doInit();
|
|
public final void refresh(Config config) {
|
// 判断是否更新
|
if (config.equals(this.config)) {
|
return;
|
}
|
log.info("[refresh][配置({})发生变化,重新初始化]", config);
|
this.config = config;
|
// 初始化
|
this.init();
|
}
|
|
@Override
|
public Long getId() {
|
return id;
|
}
|
|
/**
|
* 格式化文件的 URL 访问地址
|
* 使用场景:local、ftp、db,通过 FileController 的 getFile 来获取文件内容
|
*
|
* @param domain 自定义域名
|
* @param path 文件路径
|
* @return URL 访问地址
|
*/
|
protected String formatFileUrl(String domain, String path) {
|
return StrUtil.format("{}/admin-api/infra/file/{}/get/{}", domain, getId(), path);
|
}
|
|
}
|