From 490a9058b30100bae9d20ee58b6f572f7bcd5e92 Mon Sep 17 00:00:00 2001 From: jonathang4 Date: Wed, 27 Aug 2025 18:52:45 +0800 Subject: [PATCH] 11 --- src/lib/tos/tos-service.ts | 42 +++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/src/lib/tos/tos-service.ts b/src/lib/tos/tos-service.ts index 55ee00a..77d6f50 100644 --- a/src/lib/tos/tos-service.ts +++ b/src/lib/tos/tos-service.ts @@ -9,11 +9,21 @@ const TOS_CONFIG: TOSClientConfig = { region: process.env.TOS_REGION || 'cn-beijing', bucketName: process.env.TOS_BUCKET_NAME || 'your-bucket-name', selfDomain: process.env.TOS_SELF_DOMAIN || 'your-domain.com', // 自定义域名 - disableSSLWarnings: true + disableSSLWarnings: process.env.TOS_DISABLE_SSL_WARNINGS === 'true' // 通过环境变量控制 }; -// 创建 TOS 客户端实例 -const tosClient = new TOSClientWrapper(TOS_CONFIG); +// 懒加载 TOS 客户端实例 +let tosClient: TOSClientWrapper | null = null; + +/** + * 获取TOS客户端实例(懒加载) + */ +function getTOSClient(): TOSClientWrapper { + if (!tosClient) { + tosClient = new TOSClientWrapper(TOS_CONFIG); + } + return tosClient; +} // 使用示例 export class TOSService { @@ -24,7 +34,7 @@ export class TOSService { static async uploadText(content: string, fileName: string): Promise { try { const objectKey = `text/${Date.now()}-${fileName}`; - return await tosClient.uploadString(content, objectKey); + return await getTOSClient().uploadString(content, objectKey); } catch (error) { console.error('上传文本失败:', error.message); throw error; @@ -37,7 +47,7 @@ export class TOSService { static async uploadLocalFile(filePath: string, targetPath?: string): Promise { try { const objectKey = targetPath || `files/${Date.now()}-${path.basename(filePath)}`; - return await tosClient.uploadFile(filePath, objectKey); + return await getTOSClient().uploadFile(filePath, objectKey); } catch (error) { console.error('上传本地文件失败:', error.message); throw error; @@ -51,7 +61,7 @@ export class TOSService { try { const fileName = path.basename(new URL(url).pathname) || 'downloaded-file'; const objectKey = targetPath || `downloads/${Date.now()}-${fileName}`; - return await tosClient.uploadFromUrl(url, objectKey); + return await getTOSClient().uploadFromUrl(url, objectKey); } catch (error) { console.error('从URL上传文件失败:', error.message); throw error; @@ -69,7 +79,7 @@ export class TOSService { ): Promise { try { const objectKey = `${folder}/${Date.now()}-${fileName}`; - return await tosClient.uploadBytes(buffer, objectKey, contentType); + return await getTOSClient().uploadBytes(buffer, objectKey, contentType); } catch (error) { console.error('上传Buffer失败:', error.message); throw error; @@ -81,7 +91,7 @@ export class TOSService { */ static async downloadFile(objectKey: string): Promise { try { - return await tosClient.downloadFile(objectKey); + return await getTOSClient().downloadFile(objectKey); } catch (error) { console.error('下载文件失败:', error.message); throw error; @@ -93,7 +103,7 @@ export class TOSService { */ static async deleteFile(objectKey: string): Promise { try { - return await tosClient.deleteFile(objectKey); + return await getTOSClient().deleteFile(objectKey); } catch (error) { console.error('删除文件失败:', error.message); throw error; @@ -105,7 +115,7 @@ export class TOSService { */ static async fileExists(objectKey: string): Promise { try { - return await tosClient.fileExists(objectKey); + return await getTOSClient().fileExists(objectKey); } catch (error) { console.error('检查文件存在性失败:', error.message); throw error; @@ -117,7 +127,7 @@ export class TOSService { */ static async getFileInfo(objectKey: string): Promise { try { - return await tosClient.getFileInfo(objectKey); + return await getTOSClient().getFileInfo(objectKey); } catch (error) { console.error('获取文件信息失败:', error.message); throw error; @@ -129,7 +139,7 @@ export class TOSService { */ static async generateTempUrl(objectKey: string, expires: number = 3600): Promise { try { - return await tosClient.generateUrl(objectKey, expires); + return await getTOSClient().generateUrl(objectKey, expires); } catch (error) { console.error('生成临时URL失败:', error.message); throw error; @@ -140,7 +150,7 @@ export class TOSService { * 获取公开访问URL */ static getPublicUrl(objectKey: string): string { - return tosClient.getBaseUrl(objectKey); + return getTOSClient().getBaseUrl(objectKey); } /** @@ -148,7 +158,7 @@ export class TOSService { */ static async listFiles(prefix?: string, maxKeys: number = 100): Promise { try { - return await tosClient.listObjects(prefix, maxKeys); + return await getTOSClient().listObjects(prefix, maxKeys); } catch (error) { console.error('列出文件失败:', error.message); throw error; @@ -156,8 +166,8 @@ export class TOSService { } } -// 导出客户端实例和服务类 -export { tosClient, TOSClientWrapper }; +// 导出客户端实例获取函数和服务类 +export { getTOSClient as tosClient, TOSClientWrapper }; export default TOSService; // 使用示例代码