Files
dsProject/dsLightRag/Util/ObsUtil.py
2025-08-14 15:45:08 +08:00

79 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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()}