diff --git a/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/AbstractFileClient.java b/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/AbstractFileClient.java index ec74a6d..78d64ff 100644 --- a/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/AbstractFileClient.java +++ b/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/AbstractFileClient.java @@ -66,4 +66,22 @@ public abstract class AbstractFileClient implem return StrUtil.format("{}/admin-api/infra/file/{}/get/{}", domain, getId(), path); } + /** + * 格式化文件的 URL 访问地址,可选是否拼接“admin-api/infra/file/{id}/get” 前缀 + * + * 部分场景(例如 SFTP/FTP 直接将文件上传到 Web 根目录),自定义域名直接指向文件, + * 无需再经过后端 FileController 转发,此时应关闭前缀,仅返回 {domain}/{path}。 + * + * @param domain 自定义域名 + * @param path 文件路径 + * @param addPrefix 是否添加“admin-api/infra/file/{id}/get”前缀 + * @return URL 访问地址 + */ + protected String formatFileUrl(String domain, String path, Boolean addPrefix) { + if (Boolean.FALSE.equals(addPrefix)) { + return StrUtil.format("{}/{}", domain, path); + } + return formatFileUrl(domain, path); + } + } diff --git a/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/ftp/FtpFileClient.java b/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/ftp/FtpFileClient.java index 0108def..b5610a9 100644 --- a/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/ftp/FtpFileClient.java +++ b/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/ftp/FtpFileClient.java @@ -49,7 +49,7 @@ public class FtpFileClient extends AbstractFileClient { throw new FtpException(StrUtil.format("上传文件到目标目录 ({}) 失败", filePath)); } // 拼接返回路径 - return super.formatFileUrl(config.getDomain(), path); + return super.formatFileUrl(config.getDomain(), path, config.getAddPrefix()); } @Override diff --git a/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/ftp/FtpFileClientConfig.java b/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/ftp/FtpFileClientConfig.java index 724e831..edda8f1 100644 --- a/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/ftp/FtpFileClientConfig.java +++ b/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/ftp/FtpFileClientConfig.java @@ -28,6 +28,14 @@ public class FtpFileClientConfig implements FileClientConfig { @URL(message = "domain 必须是 URL 格式") private String domain; + /** + * 是否添加“admin-api/infra/file/{id}/get”前缀 + * + * 当自定义域名直接指向文件时,应设为 false,此时返回 {domain}/{path}; + * 否则默认 true,通过后端 FileController 转发获取文件。 + */ + private Boolean addPrefix = true; + /** * 主机地址 */ diff --git a/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/local/LocalFileClient.java b/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/local/LocalFileClient.java index d753cbe..0bb9aff 100644 --- a/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/local/LocalFileClient.java +++ b/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/local/LocalFileClient.java @@ -30,7 +30,7 @@ public class LocalFileClient extends AbstractFileClient { String filePath = getFilePath(path); FileUtil.writeBytes(content, filePath); // 拼接返回路径 - return super.formatFileUrl(config.getDomain(), path); + return super.formatFileUrl(config.getDomain(), path, config.getAddPrefix()); } @Override diff --git a/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/local/LocalFileClientConfig.java b/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/local/LocalFileClientConfig.java index b393d01..b0e3f60 100644 --- a/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/local/LocalFileClientConfig.java +++ b/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/local/LocalFileClientConfig.java @@ -27,4 +27,12 @@ public class LocalFileClientConfig implements FileClientConfig { @URL(message = "domain 必须是 URL 格式") private String domain; + /** + * 是否添加“admin-api/infra/file/{id}/get”前缀 + * + * 当自定义域名直接指向文件时,应设为 false,此时返回 {domain}/{path}; + * 否则默认 true,通过后端 FileController 转发获取文件。 + */ + private Boolean addPrefix = true; + } diff --git a/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/sftp/SftpFileClient.java b/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/sftp/SftpFileClient.java index 9c2fe2b..a0919c0 100644 --- a/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/sftp/SftpFileClient.java +++ b/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/sftp/SftpFileClient.java @@ -37,7 +37,7 @@ public class SftpFileClient extends AbstractFileClient { File file = FileUtils.createTempFile(content); sftp.upload(filePath, file); // 拼接返回路径 - return super.formatFileUrl(config.getDomain(), path); + return super.formatFileUrl(config.getDomain(), path, config.getAddPrefix()); } @Override diff --git a/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/sftp/SftpFileClientConfig.java b/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/sftp/SftpFileClientConfig.java index 1a8cdbe..02e7e83 100644 --- a/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/sftp/SftpFileClientConfig.java +++ b/yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/sftp/SftpFileClientConfig.java @@ -28,6 +28,14 @@ public class SftpFileClientConfig implements FileClientConfig { @URL(message = "domain 必须是 URL 格式") private String domain; + /** + * 是否添加“admin-api/infra/file/{id}/get”前缀 + * + * 当自定义域名直接指向文件(例如 SFTP 上传到 Web 根目录)时,应设为 false, + * 此时返回 {domain}/{path};否则默认 true,通过后端 FileController 转发获取文件。 + */ + private Boolean addPrefix = true; + /** * 主机地址 */ diff --git a/yshop-drink-vue3/src/api/infra/fileConfig/index.ts b/yshop-drink-vue3/src/api/infra/fileConfig/index.ts index ba40054..7f6f44c 100644 --- a/yshop-drink-vue3/src/api/infra/fileConfig/index.ts +++ b/yshop-drink-vue3/src/api/infra/fileConfig/index.ts @@ -12,6 +12,7 @@ export interface FileClientConfig { accessKey?: string accessSecret?: string domain: string + addPrefix?: boolean } export interface FileConfigVO { diff --git a/yshop-drink-vue3/src/views/infra/fileConfig/FileConfigForm.vue b/yshop-drink-vue3/src/views/infra/fileConfig/FileConfigForm.vue index 4d89d0a..9faa970 100644 --- a/yshop-drink-vue3/src/views/infra/fileConfig/FileConfigForm.vue +++ b/yshop-drink-vue3/src/views/infra/fileConfig/FileConfigForm.vue @@ -91,6 +91,22 @@ + + + +
+ 开启后返回 {域名}/admin-api/infra/file/{配置ID}/get/{文件路径},由后端转发获取文件; + 关闭后返回 {域名}/{文件路径},适用于自定义域名直接指向文件(如 SFTP 上传到 Web 根目录)。 +
+