如何使用Python boto3将本地文件夹上传到DigitalOcean Spaces
实现方案
要实现整目录上传,核心逻辑是遍历本地目录下的所有文件,保留相对路径结构作为Spaces的对象键,复用你现有的upload_file方法逐文件上传即可,完整实现代码如下:
import os import boto3 # 初始化Spaces客户端,和你原有逻辑一致 session = boto3.session.Session() client = session.client('s3', region_name='nyc3', endpoint_url='https://nyc3.digitaloceanspaces.com', aws_access_key_id='替换为你的ACCESS_KEY', aws_secret_access_key='替换为你的SECRET_KEY') def upload_folder(local_folder_path, space_name, remote_prefix=""): """ 上传本地文件夹到指定DigitalOcean Space :param local_folder_path: 本地待上传的文件夹路径 :param space_name: 目标Space名称 :param remote_prefix: 上传到Space内的路径前缀,可选,不传则上传到Space根目录 """ # 遍历本地文件夹下所有文件 for root, dirs, files in os.walk(local_folder_path): for file_name in files: # 生成本地文件的绝对路径 local_file_path = os.path.join(root, file_name) # 计算文件相对于根文件夹的相对路径 relative_path = os.path.relpath(local_file_path, local_folder_path) # 转换为Spaces支持的/分隔的对象键,拼接远程前缀 s3_key = os.path.join(remote_prefix, relative_path).replace(os.sep, '/') # 执行上传 client.upload_file(local_file_path, space_name, s3_key) print(f"已上传: {local_file_path} -> {space_name}/{s3_key}") # 调用示例 if __name__ == "__main__": # 示例:将本地的my_local_folder文件夹,上传到my-space的remote_dir目录下 upload_folder(local_folder_path="./my_local_folder", space_name="my-space", remote_prefix="remote_dir") # 如果要直接上传到Space根目录,改为: # upload_folder(local_folder_path="./my_local_folder", space_name="my-space", remote_prefix="")
注意事项
- DigitalOcean Spaces和S3一样没有真实的文件夹概念,通过对象键中的
/模拟目录层级,无需提前创建目录,上传文件时会自动生成对应的层级展示 - 空文件夹不会被自动上传,只有包含文件的目录才会在Spaces中展示对应的层级
- 可以根据需求在遍历文件时添加过滤逻辑,比如跳过隐藏文件、指定后缀的文件等
内容的提问来源于stack exchange,提问作者Rikky Bhai
相关产品推荐
相关产品推荐

