This commit is contained in:
jonathang4 2025-08-27 18:52:45 +08:00
parent 188be38504
commit 490a9058b3

View File

@ -9,11 +9,21 @@ const TOS_CONFIG: TOSClientConfig = {
region: process.env.TOS_REGION || 'cn-beijing', region: process.env.TOS_REGION || 'cn-beijing',
bucketName: process.env.TOS_BUCKET_NAME || 'your-bucket-name', bucketName: process.env.TOS_BUCKET_NAME || 'your-bucket-name',
selfDomain: process.env.TOS_SELF_DOMAIN || 'your-domain.com', // 自定义域名 selfDomain: process.env.TOS_SELF_DOMAIN || 'your-domain.com', // 自定义域名
disableSSLWarnings: true disableSSLWarnings: process.env.TOS_DISABLE_SSL_WARNINGS === 'true' // 通过环境变量控制
}; };
// 创建 TOS 客户端实例 // 懒加载 TOS 客户端实例
const tosClient = new TOSClientWrapper(TOS_CONFIG); let tosClient: TOSClientWrapper | null = null;
/**
* TOS客户端实例
*/
function getTOSClient(): TOSClientWrapper {
if (!tosClient) {
tosClient = new TOSClientWrapper(TOS_CONFIG);
}
return tosClient;
}
// 使用示例 // 使用示例
export class TOSService { export class TOSService {
@ -24,7 +34,7 @@ export class TOSService {
static async uploadText(content: string, fileName: string): Promise<string> { static async uploadText(content: string, fileName: string): Promise<string> {
try { try {
const objectKey = `text/${Date.now()}-${fileName}`; const objectKey = `text/${Date.now()}-${fileName}`;
return await tosClient.uploadString(content, objectKey); return await getTOSClient().uploadString(content, objectKey);
} catch (error) { } catch (error) {
console.error('上传文本失败:', error.message); console.error('上传文本失败:', error.message);
throw error; throw error;
@ -37,7 +47,7 @@ export class TOSService {
static async uploadLocalFile(filePath: string, targetPath?: string): Promise<string> { static async uploadLocalFile(filePath: string, targetPath?: string): Promise<string> {
try { try {
const objectKey = targetPath || `files/${Date.now()}-${path.basename(filePath)}`; const objectKey = targetPath || `files/${Date.now()}-${path.basename(filePath)}`;
return await tosClient.uploadFile(filePath, objectKey); return await getTOSClient().uploadFile(filePath, objectKey);
} catch (error) { } catch (error) {
console.error('上传本地文件失败:', error.message); console.error('上传本地文件失败:', error.message);
throw error; throw error;
@ -51,7 +61,7 @@ export class TOSService {
try { try {
const fileName = path.basename(new URL(url).pathname) || 'downloaded-file'; const fileName = path.basename(new URL(url).pathname) || 'downloaded-file';
const objectKey = targetPath || `downloads/${Date.now()}-${fileName}`; const objectKey = targetPath || `downloads/${Date.now()}-${fileName}`;
return await tosClient.uploadFromUrl(url, objectKey); return await getTOSClient().uploadFromUrl(url, objectKey);
} catch (error) { } catch (error) {
console.error('从URL上传文件失败:', error.message); console.error('从URL上传文件失败:', error.message);
throw error; throw error;
@ -69,7 +79,7 @@ export class TOSService {
): Promise<string> { ): Promise<string> {
try { try {
const objectKey = `${folder}/${Date.now()}-${fileName}`; const objectKey = `${folder}/${Date.now()}-${fileName}`;
return await tosClient.uploadBytes(buffer, objectKey, contentType); return await getTOSClient().uploadBytes(buffer, objectKey, contentType);
} catch (error) { } catch (error) {
console.error('上传Buffer失败:', error.message); console.error('上传Buffer失败:', error.message);
throw error; throw error;
@ -81,7 +91,7 @@ export class TOSService {
*/ */
static async downloadFile(objectKey: string): Promise<Buffer> { static async downloadFile(objectKey: string): Promise<Buffer> {
try { try {
return await tosClient.downloadFile(objectKey); return await getTOSClient().downloadFile(objectKey);
} catch (error) { } catch (error) {
console.error('下载文件失败:', error.message); console.error('下载文件失败:', error.message);
throw error; throw error;
@ -93,7 +103,7 @@ export class TOSService {
*/ */
static async deleteFile(objectKey: string): Promise<boolean> { static async deleteFile(objectKey: string): Promise<boolean> {
try { try {
return await tosClient.deleteFile(objectKey); return await getTOSClient().deleteFile(objectKey);
} catch (error) { } catch (error) {
console.error('删除文件失败:', error.message); console.error('删除文件失败:', error.message);
throw error; throw error;
@ -105,7 +115,7 @@ export class TOSService {
*/ */
static async fileExists(objectKey: string): Promise<boolean> { static async fileExists(objectKey: string): Promise<boolean> {
try { try {
return await tosClient.fileExists(objectKey); return await getTOSClient().fileExists(objectKey);
} catch (error) { } catch (error) {
console.error('检查文件存在性失败:', error.message); console.error('检查文件存在性失败:', error.message);
throw error; throw error;
@ -117,7 +127,7 @@ export class TOSService {
*/ */
static async getFileInfo(objectKey: string): Promise<any> { static async getFileInfo(objectKey: string): Promise<any> {
try { try {
return await tosClient.getFileInfo(objectKey); return await getTOSClient().getFileInfo(objectKey);
} catch (error) { } catch (error) {
console.error('获取文件信息失败:', error.message); console.error('获取文件信息失败:', error.message);
throw error; throw error;
@ -129,7 +139,7 @@ export class TOSService {
*/ */
static async generateTempUrl(objectKey: string, expires: number = 3600): Promise<string> { static async generateTempUrl(objectKey: string, expires: number = 3600): Promise<string> {
try { try {
return await tosClient.generateUrl(objectKey, expires); return await getTOSClient().generateUrl(objectKey, expires);
} catch (error) { } catch (error) {
console.error('生成临时URL失败:', error.message); console.error('生成临时URL失败:', error.message);
throw error; throw error;
@ -140,7 +150,7 @@ export class TOSService {
* 访URL * 访URL
*/ */
static getPublicUrl(objectKey: string): string { 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<any[]> { static async listFiles(prefix?: string, maxKeys: number = 100): Promise<any[]> {
try { try {
return await tosClient.listObjects(prefix, maxKeys); return await getTOSClient().listObjects(prefix, maxKeys);
} catch (error) { } catch (error) {
console.error('列出文件失败:', error.message); console.error('列出文件失败:', error.message);
throw error; throw error;
@ -156,8 +166,8 @@ export class TOSService {
} }
} }
// 导出客户端实例和服务类 // 导出客户端实例获取函数和服务类
export { tosClient, TOSClientWrapper }; export { getTOSClient as tosClient, TOSClientWrapper };
export default TOSService; export default TOSService;
// 使用示例代码 // 使用示例代码