继续,我的程序是这样的,class CosStore(): """ 腾讯云第三方存储 """ def init(self): c = C.config.get('cos', None) # 获取配置文件,腾讯云COS配置 # c = C.config['cos'] secretId = c['secretId'] secretKey = c['secretKey'] region = c['region'] # 服务器地区,广州 token = None scheme = 'https' config = CosConfig(Region=region, SecretId=secretId, SecretKey=secretKey, Token=token, Scheme=scheme) self.client = CosS3Client(config) self.bucket = c['bucket'] # 腾讯云COS,配置文件的,根目录,bucket: live-banner-prod-1303153810 self.uri = c['uri'] # 腾讯云COS,配置文件的,uri print('store文件-51行_init_函数 :', self.client) __signle = None @classmethod def build(cls): if not cls.__signle: cls.__signle = CosStore() print('store文件-59行-build函数 init :', cls.__signle) return cls.__signle def save(self, body, path): response = self.client.put_object( Bucket=self.bucket, # bucket=COS根目录 Body=body, # body=zip二进制文件 Key=path, # 云的 path=文件目录全路径 # StorageClass='STANDARD', # 需要一个bytes类型的对象,而不是'str' EnableMD5=False) url = self.uri + path print(f"store文件-第85行: url={url}, etag={response['ETag']}") return url
时间: 2024-03-17 20:44:28 浏览: 64
根据你提供的代码,可能存在以下问题:
1. 在 `__init__` 方法中,存储腾讯云 COS 配置的 `c` 变量获取方式不正确。你可以使用 `C.config['cos']` 来获取配置文件中的 `cos` 数据。
2. `__init__` 方法中的 `print` 语句应该放在最后,以便在所有属性初始化完成后打印。
3. `save` 方法中,应该将 `body` 参数转换为 `bytes` 类型,而不是 `str` 类型。可以使用 `body.encode('utf-8')` 方法将 `str` 类型转换为 `bytes` 类型。
4. `save` 方法中,`EnableMD5` 参数应该传递一个布尔值,而不是字符串。可以使用 `True` 或 `False` 来启用或禁用 MD5 校验。
下面是修改后的代码:
```
class CosStore():
""" 腾讯云第三方存储 """
def __init__(self):
c = C.config['cos']
secretId = c['secretId']
secretKey = c['secretKey']
region = c['region']
token = None
scheme = 'https'
config = CosConfig(Region=region, SecretId=secretId, SecretKey=secretKey, Token=token, Scheme=scheme)
self.client = CosS3Client(config)
self.bucket = c['bucket']
self.uri = c['uri']
print('store文件-51行_init_函数 :', self.client)
__signle = None
@classmethod
def build(cls):
if not cls.__signle:
cls.__signle = CosStore()
print('store文件-59行-build函数 init :', cls.__signle)
return cls.__signle
def save(self, body, path):
response = self.client.put_object(
Bucket=self.bucket,
Body=body.encode('utf-8'),
Key=path,
EnableMD5=False)
url = self.uri + path
print(f"store文件-第85行: url={url}, etag={response['ETag']}")
return url
```
希望这些修改能够解决你的问题。如果还有其他问题,请随时提出。
阅读全文