@certd/plugin-lib 1.33.6 → 1.33.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/aliyun/lib/oss-client.d.ts +4 -2
- package/dist/aliyun/lib/oss-client.js +17 -1
- package/dist/ftp/client.d.ts +3 -1
- package/dist/ftp/client.js +16 -2
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -1
- package/dist/oss/api.d.ts +46 -0
- package/dist/oss/api.js +48 -0
- package/dist/oss/factory.d.ts +10 -0
- package/dist/oss/factory.js +46 -0
- package/dist/oss/impls/alioss.d.ts +13 -0
- package/dist/oss/impls/alioss.js +55 -0
- package/dist/oss/impls/ftp.d.ts +12 -0
- package/dist/oss/impls/ftp.js +75 -0
- package/dist/oss/impls/qiniuoss.d.ts +13 -0
- package/dist/oss/impls/qiniuoss.js +47 -0
- package/dist/oss/impls/s3.d.ts +13 -0
- package/dist/oss/impls/s3.js +89 -0
- package/dist/oss/impls/sftp.d.ts +10 -0
- package/dist/oss/impls/sftp.js +79 -0
- package/dist/oss/impls/ssh.d.ts +11 -0
- package/dist/oss/impls/ssh.js +55 -0
- package/dist/oss/impls/tencentcos.d.ts +13 -0
- package/dist/oss/impls/tencentcos.js +51 -0
- package/dist/oss/index.d.ts +2 -0
- package/dist/oss/index.js +3 -0
- package/dist/qiniu/lib/sdk.d.ts +4 -1
- package/dist/qiniu/lib/sdk.js +45 -9
- package/dist/s3/access.d.ts +23 -0
- package/dist/s3/access.js +108 -0
- package/dist/s3/index.d.ts +1 -0
- package/dist/s3/index.js +2 -0
- package/dist/ssh/ssh-access.d.ts +1 -0
- package/dist/ssh/ssh-access.js +13 -1
- package/dist/ssh/ssh.d.ts +18 -0
- package/dist/ssh/ssh.js +88 -25
- package/dist/tencent/lib/cos-client.d.ts +3 -1
- package/dist/tencent/lib/cos-client.js +42 -2
- package/package.json +6 -5
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,24 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [1.33.8](https://github.com/certd/certd/compare/v1.33.7...v1.33.8) (2025-04-26)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* 修复http上传方式无法清除记录文件的bug ([72a7b51](https://github.com/certd/certd/commit/72a7b51d479602b2c54c6c3ac8d8a0dcb9664e73))
|
|
11
|
+
|
|
12
|
+
### Performance Improvements
|
|
13
|
+
|
|
14
|
+
* 七牛oss支持删除过期备份 ([b7113bd](https://github.com/certd/certd/commit/b7113bda2378116d6c116dc583f563cce7cf9f00))
|
|
15
|
+
* 数据库备份支持oss ([308d460](https://github.com/certd/certd/commit/308d4600efe2002f199c33b4594d3071784e58ea))
|
|
16
|
+
|
|
17
|
+
## [1.33.7](https://github.com/certd/certd/compare/v1.33.6...v1.33.7) (2025-04-22)
|
|
18
|
+
|
|
19
|
+
### Performance Improvements
|
|
20
|
+
|
|
21
|
+
* ssh PTY模式登录设置 ([8385bcc](https://github.com/certd/certd/commit/8385bcc2d7f2411a07748bb5c53f9eaf4d38d7cc))
|
|
22
|
+
* ssh伪终端模式优化,windows下不开启 ([42dfe93](https://github.com/certd/certd/commit/42dfe936b773b7bdd82ca3378363252ffffd7b71))
|
|
23
|
+
|
|
6
24
|
## [1.33.6](https://github.com/certd/certd/compare/v1.33.5...v1.33.6) (2025-04-20)
|
|
7
25
|
|
|
8
26
|
**Note:** Version bump only for package @certd/plugin-lib
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AliyunAccess } from "../access";
|
|
1
|
+
import { AliyunAccess } from "../access/index.js";
|
|
2
2
|
export declare class AliossClient {
|
|
3
3
|
access: AliyunAccess;
|
|
4
4
|
region: string;
|
|
@@ -12,6 +12,8 @@ export declare class AliossClient {
|
|
|
12
12
|
init(): Promise<void>;
|
|
13
13
|
doRequest(bucket: string, xml: string, params: any): Promise<any>;
|
|
14
14
|
checkRet(ret: any): void;
|
|
15
|
-
uploadFile(filePath: string, content: Buffer): Promise<any>;
|
|
15
|
+
uploadFile(filePath: string, content: Buffer | string): Promise<any>;
|
|
16
16
|
removeFile(filePath: string): Promise<any>;
|
|
17
|
+
downloadFile(key: string, savePath: string): Promise<any>;
|
|
18
|
+
listDir(dirKey: string): Promise<any>;
|
|
17
19
|
}
|
|
@@ -52,5 +52,21 @@ export class AliossClient {
|
|
|
52
52
|
await this.init();
|
|
53
53
|
return await this.client.delete(filePath);
|
|
54
54
|
}
|
|
55
|
+
async downloadFile(key, savePath) {
|
|
56
|
+
await this.init();
|
|
57
|
+
return await this.client.get(key, savePath);
|
|
58
|
+
}
|
|
59
|
+
async listDir(dirKey) {
|
|
60
|
+
await this.init();
|
|
61
|
+
const res = await this.client.listV2({
|
|
62
|
+
prefix: dirKey,
|
|
63
|
+
// max-keys: 100,
|
|
64
|
+
// continuation-token: "token",
|
|
65
|
+
// delimiter: "/",
|
|
66
|
+
// marker: "marker",
|
|
67
|
+
// encoding-type: "url",
|
|
68
|
+
});
|
|
69
|
+
return res.objects;
|
|
70
|
+
}
|
|
55
71
|
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3NzLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hbGl5dW4vbGliL29zcy1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLFlBQVk7SUFDdkIsTUFBTSxDQUFlO0lBRXJCLE1BQU0sQ0FBUztJQUNmLE1BQU0sQ0FBUztJQUNmLE1BQU0sQ0FBTTtJQUNaLFlBQVksSUFBOEQ7UUFDeEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsT0FBTztRQUNULENBQUM7UUFDRCxhQUFhO1FBQ2IsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQ2hDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVc7WUFDcEMsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZTtZQUM1Qyw4REFBOEQ7WUFDOUQsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFlBQVk7WUFDWixlQUFlLEVBQUUsSUFBSTtZQUNyQiw0QkFBNEI7WUFDNUIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3BCLENBQUMsQ0FBQztRQUNILE1BQU07UUFFTixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFjLEVBQUUsR0FBVyxFQUFFLE1BQVc7UUFDdEQsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRTtZQUN4RCxHQUFHLE1BQU07U0FDVixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNyQixNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNwQixNQUFNLENBQUMsZUFBZSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELFFBQVEsQ0FBQyxHQUFRO1FBQ2YsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBZ0IsRUFBRSxPQUF3QjtRQUN6RCxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQWdCO1FBQy9CLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFXLEVBQUUsUUFBZ0I7UUFDOUMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFjO1FBQzFCLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDbkMsTUFBTSxFQUFFLE1BQU07WUFDZCxpQkFBaUI7WUFDakIsK0JBQStCO1lBQy9CLGtCQUFrQjtZQUNsQixvQkFBb0I7WUFDcEIsd0JBQXdCO1NBQ3pCLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUNyQixDQUFDO0NBQ0YifQ==
|
package/dist/ftp/client.d.ts
CHANGED
|
@@ -8,7 +8,9 @@ export declare class FtpClient {
|
|
|
8
8
|
access: FtpAccess;
|
|
9
9
|
logger: ILogger;
|
|
10
10
|
});
|
|
11
|
-
connect(callback: (client: FtpClient) => Promise<
|
|
11
|
+
connect(callback: (client: FtpClient) => Promise<any>): Promise<any>;
|
|
12
12
|
upload(filePath: string, remotePath: string): Promise<void>;
|
|
13
13
|
remove(filePath: string): Promise<void>;
|
|
14
|
+
listDir(dir: string): Promise<any[]>;
|
|
15
|
+
download(filePath: string, savePath: string): Promise<void>;
|
|
14
16
|
}
|
package/dist/ftp/client.js
CHANGED
|
@@ -17,7 +17,7 @@ export class FtpClient {
|
|
|
17
17
|
this.logger.info("FTP连接成功");
|
|
18
18
|
this.client = client;
|
|
19
19
|
try {
|
|
20
|
-
await callback(this);
|
|
20
|
+
return await callback(this);
|
|
21
21
|
}
|
|
22
22
|
finally {
|
|
23
23
|
if (client) {
|
|
@@ -39,5 +39,19 @@ export class FtpClient {
|
|
|
39
39
|
this.logger.info(`开始删除文件${filePath}`);
|
|
40
40
|
await this.client.remove(filePath, true);
|
|
41
41
|
}
|
|
42
|
+
async listDir(dir) {
|
|
43
|
+
if (!dir) {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
if (!dir.endsWith("/")) {
|
|
47
|
+
dir = dir + "/";
|
|
48
|
+
}
|
|
49
|
+
this.logger.info(`开始列出目录${dir}`);
|
|
50
|
+
return await this.client.list(dir);
|
|
51
|
+
}
|
|
52
|
+
async download(filePath, savePath) {
|
|
53
|
+
this.logger.info(`开始下载文件${filePath} -> ${savePath}`);
|
|
54
|
+
await this.client.downloadTo(savePath, filePath);
|
|
55
|
+
}
|
|
42
56
|
}
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Z0cC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBRTdCLE1BQU0sT0FBTyxTQUFTO0lBQ3BCLE1BQU0sR0FBYyxJQUFJLENBQUM7SUFDekIsTUFBTSxHQUFZLElBQUksQ0FBQztJQUN2QixNQUFNLENBQU07SUFDWixZQUFZLElBQTRDO1FBQ3RELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBNkM7UUFDekQsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUMxQixNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQWEsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFnQixFQUFFLFVBQWtCO1FBQy9DLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxRQUFRLE9BQU8sVUFBVSxFQUFFLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFnQjtRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDdEMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBVztRQUN2QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDakMsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQWdCLEVBQUUsUUFBZ0I7UUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxRQUFRLE9BQU8sUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNyRCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuRCxDQUFDO0NBQ0YifQ==
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -5,4 +5,6 @@ export * from "./ftp/index.js";
|
|
|
5
5
|
export * from "./tencent/index.js";
|
|
6
6
|
export * from "./qiniu/index.js";
|
|
7
7
|
export * from "./ctyun/index.js";
|
|
8
|
-
|
|
8
|
+
export * from "./oss/index.js";
|
|
9
|
+
export * from "./s3/index.js";
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZUFBZSxDQUFDIn0=
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { IAccessService } from "@certd/pipeline";
|
|
2
|
+
import { ILogger, utils } from "@certd/basic";
|
|
3
|
+
export type OssClientRemoveByOpts = {
|
|
4
|
+
dir?: string;
|
|
5
|
+
beforeDays?: number;
|
|
6
|
+
};
|
|
7
|
+
export type OssFileItem = {
|
|
8
|
+
path: string;
|
|
9
|
+
size: number;
|
|
10
|
+
lastModified: number;
|
|
11
|
+
};
|
|
12
|
+
export type IOssClient = {
|
|
13
|
+
upload: (fileName: string, fileContent: Buffer) => Promise<void>;
|
|
14
|
+
remove: (fileName: string, opts?: {
|
|
15
|
+
joinRootDir?: boolean;
|
|
16
|
+
}) => Promise<void>;
|
|
17
|
+
download: (fileName: string, savePath: string) => Promise<void>;
|
|
18
|
+
removeBy: (removeByOpts: OssClientRemoveByOpts) => Promise<void>;
|
|
19
|
+
listDir: (dir: string) => Promise<OssFileItem[]>;
|
|
20
|
+
};
|
|
21
|
+
export type OssClientContext = {
|
|
22
|
+
accessService: IAccessService;
|
|
23
|
+
logger: ILogger;
|
|
24
|
+
utils: typeof utils;
|
|
25
|
+
};
|
|
26
|
+
export declare abstract class BaseOssClient<A> implements IOssClient {
|
|
27
|
+
rootDir: string;
|
|
28
|
+
access: A;
|
|
29
|
+
logger: ILogger;
|
|
30
|
+
utils: typeof utils;
|
|
31
|
+
ctx: OssClientContext;
|
|
32
|
+
protected constructor(opts: {
|
|
33
|
+
rootDir?: string;
|
|
34
|
+
access: A;
|
|
35
|
+
});
|
|
36
|
+
join(...strs: string[]): string;
|
|
37
|
+
setCtx(ctx: any): Promise<void>;
|
|
38
|
+
init(): Promise<void>;
|
|
39
|
+
abstract remove(fileName: string, opts?: {
|
|
40
|
+
joinRootDir?: boolean;
|
|
41
|
+
}): Promise<void>;
|
|
42
|
+
abstract upload(fileName: string, fileContent: Buffer): Promise<void>;
|
|
43
|
+
abstract download(fileName: string, savePath: string): Promise<void>;
|
|
44
|
+
abstract listDir(dir: string): Promise<OssFileItem[]>;
|
|
45
|
+
removeBy(removeByOpts: OssClientRemoveByOpts): Promise<void>;
|
|
46
|
+
}
|
package/dist/oss/api.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import dayjs from "dayjs";
|
|
2
|
+
export class BaseOssClient {
|
|
3
|
+
rootDir = "";
|
|
4
|
+
access = null;
|
|
5
|
+
logger;
|
|
6
|
+
utils;
|
|
7
|
+
ctx;
|
|
8
|
+
constructor(opts) {
|
|
9
|
+
this.rootDir = opts.rootDir || "";
|
|
10
|
+
this.access = opts.access;
|
|
11
|
+
}
|
|
12
|
+
join(...strs) {
|
|
13
|
+
let res = "";
|
|
14
|
+
for (const item of strs) {
|
|
15
|
+
if (item) {
|
|
16
|
+
if (!res) {
|
|
17
|
+
res = item;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
res += "/" + item;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
res = res.replace(/[\\/]+/g, "/");
|
|
25
|
+
return res;
|
|
26
|
+
}
|
|
27
|
+
async setCtx(ctx) {
|
|
28
|
+
// set context
|
|
29
|
+
this.ctx = ctx;
|
|
30
|
+
this.logger = ctx.logger;
|
|
31
|
+
this.utils = ctx.utils;
|
|
32
|
+
await this.init();
|
|
33
|
+
}
|
|
34
|
+
async init() {
|
|
35
|
+
// do nothing
|
|
36
|
+
}
|
|
37
|
+
async removeBy(removeByOpts) {
|
|
38
|
+
const list = await this.listDir(removeByOpts.dir);
|
|
39
|
+
// removeByOpts.beforeDays = 0;
|
|
40
|
+
const beforeDate = dayjs().subtract(removeByOpts.beforeDays, "day");
|
|
41
|
+
for (const item of list) {
|
|
42
|
+
if (item.lastModified && item.lastModified < beforeDate.valueOf()) {
|
|
43
|
+
await this.remove(item.path, { joinRootDir: false });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29zcy9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBaUMxQixNQUFNLE9BQWdCLGFBQWE7SUFDakMsT0FBTyxHQUFXLEVBQUUsQ0FBQztJQUNyQixNQUFNLEdBQU0sSUFBSSxDQUFDO0lBQ2pCLE1BQU0sQ0FBVTtJQUNoQixLQUFLLENBQWU7SUFDcEIsR0FBRyxDQUFtQjtJQUV0QixZQUFzQixJQUFxQztRQUN6RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxDQUFDLEdBQUcsSUFBYztRQUNwQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hCLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1QsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNULEdBQUcsR0FBRyxJQUFJLENBQUM7Z0JBQ2IsQ0FBQztxQkFBTSxDQUFDO29CQUNOLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEMsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFRO1FBQ25CLGNBQWM7UUFDZCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDdkIsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsYUFBYTtJQUNmLENBQUM7SUFPRCxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQW1DO1FBQ2hELE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEQsK0JBQStCO1FBQy9CLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BFLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7WUFDeEIsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ2xFLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { OssClientContext } from "./api";
|
|
2
|
+
export declare class OssClientFactory {
|
|
3
|
+
getClassByType(type: string): Promise<typeof import("./impls/alioss.js").default | typeof import("./impls/ssh.js").default | typeof import("./impls/sftp.js").default | typeof import("./impls/ftp.js").default | typeof import("./impls/tencentcos.js").default | typeof import("./impls/qiniuoss.js").default | typeof import("./impls/s3.js").default>;
|
|
4
|
+
createOssClientByType(type: string, opts: {
|
|
5
|
+
rootDir?: string;
|
|
6
|
+
access: any;
|
|
7
|
+
ctx: OssClientContext;
|
|
8
|
+
}): Promise<any>;
|
|
9
|
+
}
|
|
10
|
+
export declare const ossClientFactory: OssClientFactory;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export class OssClientFactory {
|
|
2
|
+
async getClassByType(type) {
|
|
3
|
+
if (type === "alioss") {
|
|
4
|
+
const module = await import("./impls/alioss.js");
|
|
5
|
+
return module.default;
|
|
6
|
+
}
|
|
7
|
+
else if (type === "ssh") {
|
|
8
|
+
const module = await import("./impls/ssh.js");
|
|
9
|
+
return module.default;
|
|
10
|
+
}
|
|
11
|
+
else if (type === "sftp") {
|
|
12
|
+
const module = await import("./impls/sftp.js");
|
|
13
|
+
return module.default;
|
|
14
|
+
}
|
|
15
|
+
else if (type === "ftp") {
|
|
16
|
+
const module = await import("./impls/ftp.js");
|
|
17
|
+
return module.default;
|
|
18
|
+
}
|
|
19
|
+
else if (type === "tencentcos") {
|
|
20
|
+
const module = await import("./impls/tencentcos.js");
|
|
21
|
+
return module.default;
|
|
22
|
+
}
|
|
23
|
+
else if (type === "qiniuoss") {
|
|
24
|
+
const module = await import("./impls/qiniuoss.js");
|
|
25
|
+
return module.default;
|
|
26
|
+
}
|
|
27
|
+
else if (type === "s3") {
|
|
28
|
+
const module = await import("./impls/s3.js");
|
|
29
|
+
return module.default;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
throw new Error(`暂不支持此文件上传方式: ${type}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async createOssClientByType(type, opts) {
|
|
36
|
+
const cls = await this.getClassByType(type);
|
|
37
|
+
if (cls) {
|
|
38
|
+
// @ts-ignore
|
|
39
|
+
const instance = new cls(opts);
|
|
40
|
+
await instance.setCtx(opts.ctx);
|
|
41
|
+
return instance;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export const ossClientFactory = new OssClientFactory();
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vc3MvZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBWTtRQUMvQixJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN0QixNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ2pELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUN4QixDQUFDO2FBQU0sSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDMUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM5QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDeEIsQ0FBQzthQUFNLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDL0MsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3hCLENBQUM7YUFBTSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMxQixNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUN4QixDQUFDO2FBQU0sSUFBSSxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDakMsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUNyRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDeEIsQ0FBQzthQUFNLElBQUksSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQy9CLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDbkQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3hCLENBQUM7YUFBTSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM3QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDeEIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBQ0QsS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQVksRUFBRSxJQUE4RDtRQUN0RyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLGFBQWE7WUFDYixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUMifQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseOssClient, OssFileItem } from "../api.js";
|
|
2
|
+
import { AliossAccess, AliossClient } from "../../aliyun/index.js";
|
|
3
|
+
export default class AliOssClientImpl extends BaseOssClient<AliossAccess> {
|
|
4
|
+
client: AliossClient;
|
|
5
|
+
join(...strs: string[]): string;
|
|
6
|
+
init(): Promise<void>;
|
|
7
|
+
download(filePath: string, savePath: string): Promise<void>;
|
|
8
|
+
listDir(dir: string): Promise<OssFileItem[]>;
|
|
9
|
+
upload(filePath: string, fileContent: Buffer | string): Promise<void>;
|
|
10
|
+
remove(filePath: string, opts?: {
|
|
11
|
+
joinRootDir?: boolean;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { BaseOssClient } from "../api.js";
|
|
2
|
+
import { AliossClient } from "../../aliyun/index.js";
|
|
3
|
+
import dayjs from "dayjs";
|
|
4
|
+
export default class AliOssClientImpl extends BaseOssClient {
|
|
5
|
+
client;
|
|
6
|
+
join(...strs) {
|
|
7
|
+
const str = super.join(...strs);
|
|
8
|
+
if (str.startsWith("/")) {
|
|
9
|
+
return str.substring(1);
|
|
10
|
+
}
|
|
11
|
+
return str;
|
|
12
|
+
}
|
|
13
|
+
async init() {
|
|
14
|
+
const aliyunAccess = await this.ctx.accessService.getById(this.access.accessId);
|
|
15
|
+
const client = new AliossClient({
|
|
16
|
+
access: aliyunAccess,
|
|
17
|
+
bucket: this.access.bucket,
|
|
18
|
+
region: this.access.region,
|
|
19
|
+
});
|
|
20
|
+
await client.init();
|
|
21
|
+
this.client = client;
|
|
22
|
+
}
|
|
23
|
+
async download(filePath, savePath) {
|
|
24
|
+
const key = this.join(this.rootDir, filePath);
|
|
25
|
+
await this.client.downloadFile(key, savePath);
|
|
26
|
+
}
|
|
27
|
+
async listDir(dir) {
|
|
28
|
+
const dirKey = this.join(this.rootDir, dir) + "/";
|
|
29
|
+
const list = await this.client.listDir(dirKey);
|
|
30
|
+
this.logger.info(`列出目录: ${dirKey},文件数:${list.length}`);
|
|
31
|
+
return list.map(item => {
|
|
32
|
+
return {
|
|
33
|
+
path: item.name,
|
|
34
|
+
lastModified: dayjs(item.lastModified).valueOf(),
|
|
35
|
+
size: item.size,
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
async upload(filePath, fileContent) {
|
|
40
|
+
const key = this.join(this.rootDir, filePath);
|
|
41
|
+
this.logger.info(`开始上传文件: ${key}`);
|
|
42
|
+
await this.client.uploadFile(key, fileContent);
|
|
43
|
+
this.logger.info(`文件上传成功: ${filePath}`);
|
|
44
|
+
}
|
|
45
|
+
async remove(filePath, opts) {
|
|
46
|
+
if (opts?.joinRootDir !== false) {
|
|
47
|
+
filePath = this.join(this.rootDir, filePath);
|
|
48
|
+
}
|
|
49
|
+
const key = filePath;
|
|
50
|
+
// remove file from alioss
|
|
51
|
+
await this.client.removeFile(key);
|
|
52
|
+
this.logger.info(`文件删除成功: ${key}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxpb3NzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29zcy9pbXBscy9hbGlvc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBZSxNQUFNLFdBQVcsQ0FBQztBQUN2RCxPQUFPLEVBQWdCLFlBQVksRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsTUFBTSxDQUFDLE9BQU8sT0FBTyxnQkFBaUIsU0FBUSxhQUEyQjtJQUN2RSxNQUFNLENBQWU7SUFDckIsSUFBSSxDQUFDLEdBQUcsSUFBYztRQUNwQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFlLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUYsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUM7WUFDOUIsTUFBTSxFQUFFLFlBQVk7WUFDcEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtZQUMxQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1NBQzNCLENBQUMsQ0FBQztRQUNILE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQWdCLEVBQUUsUUFBZ0I7UUFDL0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQVc7UUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNsRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsTUFBTSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixPQUFPO2dCQUNMLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hELElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTthQUNoQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFnQixFQUFFLFdBQTRCO1FBQ3pELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDbkMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQWdCLEVBQUUsSUFBZ0M7UUFDN0QsSUFBSSxJQUFJLEVBQUUsV0FBVyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ2hDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQztRQUNyQiwwQkFBMEI7UUFDMUIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseOssClient } from "../api.js";
|
|
2
|
+
import { FtpAccess } from "../../ftp/index.js";
|
|
3
|
+
export default class FtpOssClientImpl extends BaseOssClient<FtpAccess> {
|
|
4
|
+
join(...strs: string[]): string;
|
|
5
|
+
download(fileName: string, savePath: string): Promise<void>;
|
|
6
|
+
listDir(dir: string): Promise<any>;
|
|
7
|
+
upload(filePath: string, fileContent: Buffer | string): Promise<void>;
|
|
8
|
+
private getFtpClient;
|
|
9
|
+
remove(filePath: string, opts?: {
|
|
10
|
+
joinRootDir?: boolean;
|
|
11
|
+
}): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { BaseOssClient } from "../api.js";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import os from "os";
|
|
4
|
+
import fs from "fs";
|
|
5
|
+
import { FtpClient } from "../../ftp/index.js";
|
|
6
|
+
export default class FtpOssClientImpl extends BaseOssClient {
|
|
7
|
+
join(...strs) {
|
|
8
|
+
const str = super.join(...strs);
|
|
9
|
+
if (!str.startsWith("/")) {
|
|
10
|
+
return "/" + str;
|
|
11
|
+
}
|
|
12
|
+
return str;
|
|
13
|
+
}
|
|
14
|
+
async download(fileName, savePath) {
|
|
15
|
+
const client = this.getFtpClient();
|
|
16
|
+
await client.connect(async (client) => {
|
|
17
|
+
const path = this.join(this.rootDir, fileName);
|
|
18
|
+
await client.download(path, savePath);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
async listDir(dir) {
|
|
22
|
+
const client = this.getFtpClient();
|
|
23
|
+
return await client.connect(async (client) => {
|
|
24
|
+
const path = this.join(this.rootDir, dir);
|
|
25
|
+
const res = await client.listDir(path);
|
|
26
|
+
return res.map(item => {
|
|
27
|
+
return {
|
|
28
|
+
path: this.join(path, item.name),
|
|
29
|
+
size: item.size,
|
|
30
|
+
lastModified: item.modifiedAt.getTime(),
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
async upload(filePath, fileContent) {
|
|
36
|
+
const client = this.getFtpClient();
|
|
37
|
+
await client.connect(async (client) => {
|
|
38
|
+
let tmpFilePath = fileContent;
|
|
39
|
+
if (typeof fileContent !== "string") {
|
|
40
|
+
tmpFilePath = path.join(os.tmpdir(), "cert", "oss", filePath);
|
|
41
|
+
const dir = path.dirname(tmpFilePath);
|
|
42
|
+
if (!fs.existsSync(dir)) {
|
|
43
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
44
|
+
}
|
|
45
|
+
fs.writeFileSync(tmpFilePath, fileContent);
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
// Write file to temp path
|
|
49
|
+
const path = this.join(this.rootDir, filePath);
|
|
50
|
+
await client.upload(tmpFilePath, path);
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
// Remove temp file
|
|
54
|
+
fs.unlinkSync(tmpFilePath);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
getFtpClient() {
|
|
59
|
+
return new FtpClient({
|
|
60
|
+
access: this.access,
|
|
61
|
+
logger: this.logger,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
async remove(filePath, opts) {
|
|
65
|
+
if (opts?.joinRootDir !== false) {
|
|
66
|
+
filePath = this.join(this.rootDir, filePath);
|
|
67
|
+
}
|
|
68
|
+
const client = this.getFtpClient();
|
|
69
|
+
await client.connect(async (client) => {
|
|
70
|
+
await client.client.remove(filePath);
|
|
71
|
+
this.logger.info(`删除文件成功: ${filePath}`);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnRwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29zcy9pbXBscy9mdHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLEVBQWEsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFMUQsTUFBTSxDQUFDLE9BQU8sT0FBTyxnQkFBaUIsU0FBUSxhQUF3QjtJQUNwRSxJQUFJLENBQUMsR0FBRyxJQUFjO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFnQixFQUFFLFFBQWdCO1FBQy9DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuQyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMvQyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBVztRQUN2QixNQUFNLE1BQU0s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
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { QiniuClient, QiniuOssAccess } from "../../qiniu/index.js";
|
|
2
|
+
import { BaseOssClient, OssFileItem } from "../api.js";
|
|
3
|
+
export default class QiniuOssClientImpl extends BaseOssClient<QiniuOssAccess> {
|
|
4
|
+
client: QiniuClient;
|
|
5
|
+
join(...strs: string[]): string;
|
|
6
|
+
init(): Promise<void>;
|
|
7
|
+
download(fileName: string, savePath: string): Promise<void>;
|
|
8
|
+
listDir(dir: string): Promise<OssFileItem[]>;
|
|
9
|
+
upload(filePath: string, fileContent: Buffer | string): Promise<void>;
|
|
10
|
+
remove(filePath: string, opts?: {
|
|
11
|
+
joinRootDir?: boolean;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { QiniuClient } from "../../qiniu/index.js";
|
|
2
|
+
import { BaseOssClient } from "../api.js";
|
|
3
|
+
export default class QiniuOssClientImpl extends BaseOssClient {
|
|
4
|
+
client;
|
|
5
|
+
join(...strs) {
|
|
6
|
+
const str = super.join(...strs);
|
|
7
|
+
if (str.startsWith("/")) {
|
|
8
|
+
return str.substring(1);
|
|
9
|
+
}
|
|
10
|
+
return str;
|
|
11
|
+
}
|
|
12
|
+
async init() {
|
|
13
|
+
const qiniuAccess = await this.ctx.accessService.getById(this.access.accessId);
|
|
14
|
+
this.client = new QiniuClient({
|
|
15
|
+
access: qiniuAccess,
|
|
16
|
+
logger: this.logger,
|
|
17
|
+
http: this.ctx.utils.http,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async download(fileName, savePath) {
|
|
21
|
+
const path = this.join(this.rootDir, fileName);
|
|
22
|
+
await this.client.downloadFile(this.access.bucket, path, savePath);
|
|
23
|
+
}
|
|
24
|
+
async listDir(dir) {
|
|
25
|
+
const path = this.join(this.rootDir, dir);
|
|
26
|
+
const res = await this.client.listDir(this.access.bucket, path);
|
|
27
|
+
return res.items.map(item => {
|
|
28
|
+
return {
|
|
29
|
+
path: item.key,
|
|
30
|
+
size: item.fsize,
|
|
31
|
+
//ns ,纳秒,去掉低4位 为毫秒
|
|
32
|
+
lastModified: Math.floor(item.putTime / 10000),
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
async upload(filePath, fileContent) {
|
|
37
|
+
const path = this.join(this.rootDir, filePath);
|
|
38
|
+
await this.client.uploadFile(this.access.bucket, path, fileContent);
|
|
39
|
+
}
|
|
40
|
+
async remove(filePath, opts) {
|
|
41
|
+
if (opts?.joinRootDir !== false) {
|
|
42
|
+
filePath = this.join(this.rootDir, filePath);
|
|
43
|
+
}
|
|
44
|
+
await this.client.removeFile(this.access.bucket, filePath);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWluaXVvc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3NzL2ltcGxzL3Fpbml1b3NzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxXQUFXLEVBQWtCLE1BQU0sc0JBQXNCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBZSxNQUFNLFdBQVcsQ0FBQztBQUV2RCxNQUFNLENBQUMsT0FBTyxPQUFPLGtCQUFtQixTQUFRLGFBQTZCO0lBQzNFLE1BQU0sQ0FBYztJQUVwQixJQUFJLENBQUMsR0FBRyxJQUFjO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQWMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzVCLE1BQU0sRUFBRSxXQUFXO1lBQ25CLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFnQixFQUFFLFFBQWdCO1FBQy9DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFXO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUIsT0FBTztnQkFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNoQixrQkFBa0I7Z0JBQ2xCLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2FBQy9DLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQWdCLEVBQUUsV0FBNEI7UUFDekQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQWdCLEVBQUUsSUFBZ0M7UUFDN0QsSUFBSSxJQUFJLEVBQUUsV0FBVyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ2hDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0QsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseOssClient, OssFileItem } from "../api.js";
|
|
2
|
+
import { S3Access } from "../../s3/access.js";
|
|
3
|
+
export default class S3OssClientImpl extends BaseOssClient<S3Access> {
|
|
4
|
+
client: any;
|
|
5
|
+
join(...strs: string[]): string;
|
|
6
|
+
init(): Promise<void>;
|
|
7
|
+
download(filePath: string, savePath: string): Promise<void>;
|
|
8
|
+
listDir(dir: string): Promise<OssFileItem[]>;
|
|
9
|
+
upload(filePath: string, fileContent: Buffer | string): Promise<void>;
|
|
10
|
+
remove(filePath: string, opts?: {
|
|
11
|
+
joinRootDir?: boolean;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
}
|