通过脚本程序将服务器目录/data/app/oss_from_aliyun/data/xxx/upload下的文件上传至阿里云OSS指定Bucket的子目录中,同时记录上传过程中的成功与失败详情。
脚本功能实现
#!/usr/bin/env python3
# upload_ossobject_from_aliyun.py
import oss2
import os
import logging
# 设置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def upload_directory(bucket_name, endpoint, access_key_id, access_key_secret, local_dir, oss_prefix):
# 配置认证信息
auth = oss2.Auth(access_key_id, access_key_secret)
# 初始化Bucket实例
bucket = oss2.Bucket(auth, endpoint, bucket_name)
# 遍历本地目录下的所有文件
for root, dirs, files in os.walk(local_dir):
for file in files:
# 构建完整的本地文件路径
local_file_path = os.path.join(root, file)
try:
# 构建OSS中的目标路径
oss_key = os.path.join(oss_prefix, os.path.relpath(local_file_path, local_dir))
# 上传文件
bucket.put_object_from_file(oss_key, local_file_path)
logging.info(f'Successfully uploaded {local_file_path} to {oss_key}')
except Exception as e:
logging.error(f'Failed to upload {local_file_path} to {oss_key}: {str(e)}')
# 配置参数
bucket_name = 'bucketname'
endpoint = 'oss-cn-shanghai.aliyuncs.com'
access_key_id = 'AccessKey ID for OSS'
access_key_secret = 'AccessKey Secret for OSS'
local_dir = '/data/app/oss_from_aliyun/data/xxx/upload'
oss_prefix = 'data' # 上传到bucket的/data目录中
# 调用函数上传文件
upload_directory(bucket_name, endpoint, access_key_id, access_key_secret, local_dir, oss_prefix)
运行上传功能
[root@dev-rocky9-shanghai-area1 ~]# python3 /data/python/upload_ossobject_from_aliyun.py
2024-07-22 16:01:15,485 - INFO - Successfully uploaded /data/app/oss_from_aliyun/data/xxx/upload/oss.tmp to data/oss.tmp