From 4eb940ffe765a0330331bc6af8396315e36d4e4a Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sun, 15 Feb 2026 13:16:16 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20http=E6=A0=A1=E9=AA=8C=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=E6=94=AF=E6=8C=81scp=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/certd-client/src/components/plugins/lib/dicts.ts | 1 + .../ui/certd-server/src/plugins/plugin-lib/oss/factory.ts | 3 +++ .../certd-server/src/plugins/plugin-lib/oss/impls/scp.ts | 7 +++++++ .../certd-server/src/plugins/plugin-lib/oss/impls/sftp.ts | 6 +++++- 4 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 packages/ui/certd-server/src/plugins/plugin-lib/oss/impls/scp.ts diff --git a/packages/ui/certd-client/src/components/plugins/lib/dicts.ts b/packages/ui/certd-client/src/components/plugins/lib/dicts.ts index 28a3902f0..33eec1dba 100644 --- a/packages/ui/certd-client/src/components/plugins/lib/dicts.ts +++ b/packages/ui/certd-client/src/components/plugins/lib/dicts.ts @@ -20,6 +20,7 @@ export const Dicts = { uploaderTypeDict: dict({ data: [ { label: "SFTP", value: "sftp" }, + { label: "SCP", value: "scp" }, { label: "FTP", value: "ftp" }, { label: "阿里云OSS", value: "alioss" }, { label: "腾讯云COS", value: "tencentcos" }, diff --git a/packages/ui/certd-server/src/plugins/plugin-lib/oss/factory.ts b/packages/ui/certd-server/src/plugins/plugin-lib/oss/factory.ts index e05cabe09..ef7961a88 100644 --- a/packages/ui/certd-server/src/plugins/plugin-lib/oss/factory.ts +++ b/packages/ui/certd-server/src/plugins/plugin-lib/oss/factory.ts @@ -23,6 +23,9 @@ export class OssClientFactory { } else if (type === "s3") { const module = await import("./impls/s3.js"); return module.default; + } else if (type === "scp") { + const module = await import("./impls/scp.js"); + return module.default; } else { throw new Error(`暂不支持此文件上传方式: ${type}`); } diff --git a/packages/ui/certd-server/src/plugins/plugin-lib/oss/impls/scp.ts b/packages/ui/certd-server/src/plugins/plugin-lib/oss/impls/scp.ts new file mode 100644 index 000000000..d1e8af7a7 --- /dev/null +++ b/packages/ui/certd-server/src/plugins/plugin-lib/oss/impls/scp.ts @@ -0,0 +1,7 @@ +import SftpOssClientImpl from "./sftp.js"; + +export default class ScpOssClientImpl extends SftpOssClientImpl { + getUploaderType() { + return 'scp'; + } +} diff --git a/packages/ui/certd-server/src/plugins/plugin-lib/oss/impls/sftp.ts b/packages/ui/certd-server/src/plugins/plugin-lib/oss/impls/sftp.ts index 79b80e162..0c7cff8fb 100644 --- a/packages/ui/certd-server/src/plugins/plugin-lib/oss/impls/sftp.ts +++ b/packages/ui/certd-server/src/plugins/plugin-lib/oss/impls/sftp.ts @@ -5,6 +5,9 @@ import fs from "fs"; import { SftpAccess, SshAccess, SshClient } from "../../ssh/index.js"; export default class SftpOssClientImpl extends BaseOssClient { + getUploaderType() { + return 'sftp'; + } async download(fileName: string, savePath: string): Promise { const path = this.join(this.rootDir, fileName); const client = new SshClient(this.logger); @@ -48,6 +51,7 @@ export default class SftpOssClientImpl extends BaseOssClient { const key = this.join(this.rootDir, filePath); try { const client = new SshClient(this.logger); + const uploaderType = this.getUploaderType(); await client.uploadFiles({ connectConf: access, mkdirs: true, @@ -57,7 +61,7 @@ export default class SftpOssClientImpl extends BaseOssClient { remotePath: key, }, ], - uploadType: "sftp", + uploadType: uploaderType, opts: { mode: this.access?.fileMode ?? undefined, },