You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python向AWS S3不同区域的存储桶上传文件

使用Python向AWS S3不同区域存储桶上传文件

嘿,这就给你详细讲清楚怎么用Python(基于boto库)往AWS S3不同区域的存储桶上传文件,结合代码示例一步步来:

1. 前置准备

  • 先确保安装了boto库:pip install boto
  • 准备好你的AWS访问密钥(AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY),千万不要把密钥硬编码后提交到公共代码仓库,建议用环境变量或AWS凭证文件管理!

2. 完整代码示例及关键说明

下面是可直接复用的完整代码,我会标注跨区域上传的核心要点:

import boto
import boto.s3
import sys
from boto.s3.key import Key

# 替换为你的AWS密钥(推荐用环境变量读取,而非硬编码)
AWS_ACCESS_KEY_ID = '你的AWS_ACCESS_KEY_ID'
AWS_SECRET_ACCESS_KEY = '你的AWS_SECRET_ACCESS_KEY'

# 目标存储桶信息:名称+所在区域(比如us-west-2、ap-southeast-1等)
bucket_name = "你的存储桶名称"
bucket_region = "存储桶所在的AWS区域标识"

# 核心:连接到指定区域的S3服务
# 一定要用connect_to_region指定区域,避免默认区域连接导致跨区域访问报错
conn = boto.s3.connect_to_region(
    bucket_region,
    aws_access_key_id=AWS_ACCESS_KEY_ID,
    aws_secret_access_key=AWS_SECRET_ACCESS_KEY
)

# 获取目标存储桶(validate=True会验证桶的存在性及你的访问权限)
try:
    bucket = conn.get_bucket(bucket_name, validate=True)
except boto.exception.S3ResponseError as e:
    print(f"获取存储桶失败:{e}")
    sys.exit(1)

# 本地要上传的文件路径
testfile = "本地文件的完整路径"
print(f'正在上传 {testfile} 到Amazon S3存储桶 {bucket_name}')

# 上传进度回调函数:用点号实时显示进度
def percent_cb(complete, total):
    sys.stdout.write('.')
    sys.stdout.flush()

# 创建S3 Key对象,指定文件在存储桶中的保存名称(可与本地文件名不同)
k = Key(bucket)
k.key = "存储桶内的目标文件名"  # 若想保持原名,可替换为os.path.basename(testfile)

# 执行上传,带上进度回调
try:
    # num_cb参数控制回调次数,这里设为10即每10%进度触发一次回调
    k.set_contents_from_filename(testfile, cb=percent_cb, num_cb=10)
    print("\n上传完成!")
except Exception as e:
    print(f"\n上传失败:{e}")

3. 跨区域上传的关键注意点

  • 指定区域是核心:必须使用connect_to_region()连接存储桶所在的区域,不能用默认的connect_s3(),否则会出现跨区域访问的权限或连接错误。
  • 存储桶验证开关:get_bucket的validate=True会额外请求验证桶的状态,如果你确认桶存在且自己有权限,可以设为False来提升连接速度。
  • 密钥安全最佳实践:永远不要把密钥硬编码在代码里,推荐通过环境变量读取:
    import os
    AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
    AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
    

内容的提问来源于stack exchange,提问作者Marimuthu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:45:17