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 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); } }