@@ -72,29 +72,74 @@ def model_post_init(self, __context: Any) -> None:
7272 logger .error (f"Client initialization failed:{ e } " )
7373 self ._client = None
7474
75+ def _refresh_client (self ):
76+ try :
77+ if self ._client :
78+ self ._client .close ()
79+ self ._client = tos .TosClientV2 (
80+ self .config .ak ,
81+ self .config .sk ,
82+ endpoint = f"tos-{ self .config .region } .volces.com" ,
83+ region = self .config .region ,
84+ )
85+ logger .info ("refreshed client successfully." )
86+ except Exception as e :
87+ logger .error (f"Failed to refresh client: { str (e )} " )
88+ self ._client = None
89+
7590 def create_bucket (self ) -> bool :
76- """If the bucket does not exist, create it"""
91+ """If the bucket does not exist, create it and set CORS rules """
7792 if not self ._client :
7893 logger .error ("TOS client is not initialized" )
7994 return False
8095 try :
8196 self ._client .head_bucket (self .config .bucket_name )
8297 logger .info (f"Bucket { self .config .bucket_name } already exists" )
83- return True
8498 except tos .exceptions .TosServerError as e :
8599 if e .status_code == 404 :
86- self ._client .create_bucket (
87- bucket = self .config .bucket_name ,
88- storage_class = tos .StorageClassType .Storage_Class_Standard ,
89- acl = tos .ACLType .ACL_Private ,
90- )
91- logger .info (f"Bucket { self .config .bucket_name } created successfully" )
92- return True
100+ try :
101+ self ._client .create_bucket (
102+ bucket = self .config .bucket_name ,
103+ storage_class = tos .StorageClassType .Storage_Class_Standard ,
104+ acl = tos .ACLType .ACL_Public_Read , # 公开读
105+ )
106+ logger .info (
107+ f"Bucket { self .config .bucket_name } created successfully"
108+ )
109+ self ._refresh_client ()
110+ except Exception as create_error :
111+ logger .error (f"Bucket creation failed: { str (create_error )} " )
112+ return False
93113 else :
94- logger .error (f"Bucket creation failed: { str (e )} " )
114+ logger .error (f"Bucket check failed: { str (e )} " )
95115 return False
96116 except Exception as e :
97- logger .error (f"Bucket creation failed: { str (e )} " )
117+ logger .error (f"Bucket check failed: { str (e )} " )
118+ return False
119+
120+ # 确保在所有路径上返回布尔值
121+ return self ._set_cors_rules ()
122+
123+ def _set_cors_rules (self ) -> bool :
124+ if not self ._client :
125+ logger .error ("TOS client is not initialized" )
126+ return False
127+ try :
128+ rule = tos .models2 .CORSRule (
129+ allowed_origins = ["*" ],
130+ allowed_methods = ["GET" , "HEAD" ],
131+ allowed_headers = ["*" ],
132+ max_age_seconds = 1000 ,
133+ )
134+ self ._client .put_bucket_cors (self .config .bucket_name , [rule ])
135+ logger .info (
136+ f"CORS rules for bucket { self .config .bucket_name } set successfully"
137+ )
138+ return True
139+ except Exception as e :
140+ logger .error (
141+ f"Failed to set CORS rules for bucket { self .config .bucket_name } : { str (e )} "
142+ )
98143 return False
99144
100145 def build_tos_url (
@@ -153,7 +198,6 @@ def _do_upload_file(self, object_key: str, file_path: str) -> None:
153198 return
154199 if not self .create_bucket ():
155200 return
156-
157201 self ._client .put_object_from_file (
158202 bucket = self .config .bucket_name , key = object_key , file_path = file_path
159203 )
0 commit comments