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',
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<string> {
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<string> {
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<string> {
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<Buffer> {
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<boolean> {
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<boolean> {
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<any> {
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<string> {
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<any[]> {
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;
// 使用示例代码