AWS S3 文件上传与下载的 Python 实现

AWS S3(Simple Storage Service)是云存储服务,通过 Python 的 boto3 库可快速实现文件操作。以下分步骤说明核心实现:


1. 环境准备
  • 安装必要库:
    pip install boto3
    

  • 配置 AWS 凭证(需提前获取):
    • 访问密钥 ID(AWS_ACCESS_KEY_ID
    • 秘密访问密钥(AWS_SECRET_ACCESS_KEY
    • 存储区域(如 ap-northeast-1

2. 文件上传
import boto3

def upload_to_s3(file_path, bucket_name, object_name):
    s3 = boto3.client(
        's3',
        aws_access_key_id='YOUR_ACCESS_KEY',
        aws_secret_access_key='YOUR_SECRET_KEY',
        region_name='YOUR_REGION'
    )
    try:
        s3.upload_file(file_path, bucket_name, object_name)
        print(f"文件 {object_name} 上传至 {bucket_name} 成功")
    except Exception as e:
        print(f"上传失败: {e}")

# 示例:上传本地文件
upload_to_s3('local_file.txt', 'my-bucket', 'remote_file.txt')


3. 文件下载
def download_from_s3(bucket_name, object_name, local_path):
    s3 = boto3.client(
        's3',
        aws_access_key_id='YOUR_ACCESS_KEY',
        aws_secret_access_key='YOUR_SECRET_KEY',
        region_name='YOUR_REGION'
    )
    try:
        s3.download_file(bucket_name, object_name, local_path)
        print(f"文件 {object_name} 下载到 {local_path} 成功")
    except Exception as e:
        print(f"下载失败: {e}")

# 示例:下载到本地
download_from_s3('my-bucket', 'remote_file.txt', 'downloaded_file.txt')


4. 关键参数说明
参数作用示例值
file_path本地文件路径/data/test.pdf
bucket_nameS3 存储桶名称my-documents
object_nameS3 中的文件标识(含路径)users/file001.txt
region_nameAWS 区域代码us-west-2

5. 安全建议
  1. 凭证管理:避免硬编码密钥,使用 IAM 角色或环境变量
    import os
    aws_access_key_id = os.environ.get('AWS_ACCESS_KEY_ID')
    

  2. 权限控制:通过 S3 Bucket Policy 限制访问
  3. 异常处理:增加具体错误类型捕获(如 ClientError

注:完整文档参考 boto3 S3 官方指南

更多推荐