python 递归上传文件到阿里云oss
| import os |
| import oss2 |
| import json |
| |
| access_key_id = 'xxxxxxxxx' |
| access_key_secret = 'xxxxxxxxxxxxx' |
| endpoint = 'xxxxxxxxxxxxx' |
| bucket_name = 'bucketName' |
| |
| |
| local_directory = '/home/test' |
| |
| |
| |
| state_file = 'upload_state.txt' |
| |
| |
| auth = oss2.Auth(access_key_id, access_key_secret) |
| bucket = oss2.Bucket(auth, endpoint, bucket_name) |
| |
| |
| |
| |
| if os.path.exists(state_file): |
| sz = os.path.getsize(state_file) |
| if not sz: |
| upload_state = {} |
| else: |
| with open(state_file, 'r') as f: |
| upload_state = json.load(f) |
| else: |
| upload_state = {} |
| |
| |
| |
| |
| |
| |
| def upload_directory_to_oss(local_directory, bucket, oss_directory='logs'): |
| for root, dirs, files in os.walk(local_directory): |
| for file in files: |
| local_file_path = os.path.join(root, file) |
| oss_object_key = os.path.join(oss_directory, os.path.relpath(local_file_path, local_directory)) |
| |
| |
| if should_upload(local_file_path, oss_object_key): |
| |
| bucket.put_object_from_file(oss_object_key, local_file_path) |
| print(f'Uploaded {local_file_path} to {oss_object_key}') |
| |
| |
| upload_state[oss_object_key] = os.path.getmtime(local_file_path) |
| |
| |
| os.remove(local_file_path) |
| print(f'Deleted {local_file_path}') |
| |
| |
| |
| def should_upload(local_file_path, oss_object_key): |
| if oss_object_key not in upload_state: |
| |
| return True |
| else: |
| |
| local_mtime = os.path.getmtime(local_file_path) |
| return local_mtime > upload_state[oss_object_key] |
| |
| |
| |
| upload_directory_to_oss(local_directory, bucket) |
| |
| |
| with open(state_file, 'w') as f: |
| json.dump(upload_state, f) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了