79 lines
2.8 KiB
Python
79 lines
2.8 KiB
Python
# pip install esdk-obs-python --trusted-host pypi.org
|
||
import traceback
|
||
import logging
|
||
|
||
from obs import ObsClient
|
||
from obs import PutObjectHeader
|
||
|
||
from Config.Config import OBS_AK, OBS_SK, OBS_SERVER, OBS_BUCKET
|
||
|
||
# 配置日志
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
class ObsUploader:
|
||
def __init__(self, access_key_id, secret_access_key, server):
|
||
"""
|
||
初始化OBS客户端
|
||
:param access_key_id: 访问密钥ID
|
||
:param secret_access_key: 秘密访问密钥
|
||
:param server: OBS服务器地址
|
||
"""
|
||
self.obs_client = ObsClient(
|
||
access_key_id=access_key_id,
|
||
secret_access_key=secret_access_key,
|
||
server=server
|
||
)
|
||
|
||
def upload_file(self, bucket_name, object_key, file_path, metadata=None, headers=None):
|
||
"""
|
||
上传文件到OBS
|
||
:param bucket_name: 桶名称
|
||
:param object_key: 对象键(上传后的文件名)
|
||
:param file_path: 本地文件路径
|
||
:param meta元数据
|
||
:param headers: 请求头
|
||
:return: 成功返回True和响应信息,失败返回False和错误信息
|
||
"""
|
||
try:
|
||
# 初始化默认参数
|
||
if metadata is None:
|
||
metadata = {}
|
||
if headers is None:
|
||
headers = PutObjectHeader()
|
||
|
||
# 执行文件上传
|
||
resp = self.obs_client.putFile(
|
||
bucket_name,
|
||
object_key,
|
||
file_path,
|
||
metadata,
|
||
headers
|
||
)
|
||
|
||
# 检查响应状态
|
||
if resp.status < 300:
|
||
logger.info(f'文件上传成功: {file_path} -> {bucket_name}/{object_key}')
|
||
logger.info(f'requestId: {resp.requestId}')
|
||
logger.info(f'etag: {resp.body.etag}')
|
||
return True, {
|
||
'requestId': resp.requestId,
|
||
'etag': resp.body.etag,
|
||
'versionId': resp.body.versionId,
|
||
'storageClass': resp.body.storageClass
|
||
}
|
||
else:
|
||
error_msg = f'文件上传失败: {resp.errorCode} - {resp.errorMessage}'
|
||
logger.error(error_msg)
|
||
logger.error(f'requestId: {resp.requestId}')
|
||
return False, {
|
||
'requestId': resp.requestId,
|
||
'errorCode': resp.errorCode,
|
||
'errorMessage': resp.errorMessage
|
||
}
|
||
except Exception as e:
|
||
error_msg = f'文件上传异常: {str(e)}'
|
||
logger.error(error_msg)
|
||
logger.error(traceback.format_exc())
|
||
return False, {'error': str(e), 'traceback': traceback.format_exc()}
|