七彩云对象存储
S3 接入教程 / 6 分钟阅读

怎么用Python SDK接入S3对象存储

一、结论

你只需要安装S3官方适配的Python SDK(boto3),配置对应S3服务的访问密钥、服务端点、区域三个核心参数,即可快速完成接入,实现存储桶管理、文件上传下载、权限配置等全量对象存储操作。

二、准备工作

1. 可用的S3兼容对象存储服务:可选择原生AWS S3,或者国内更易接入的七彩云对象存储等兼容S3协议的服务,需提前开通服务并创建至少1个存储桶。

2. 访问凭证:对应服务的Access Key ID(访问密钥ID)和Secret Access Key(秘密访问密钥),可在对应服务的控制台获取,请注意妥善保管,避免泄露。

3. Python运行环境:版本要求3.7及以上,可在终端执行python --versionpython3 --version查看当前版本,版本过低请先升级Python。

4. Python包管理工具pip:确保为最新版本,执行python -m pip install --upgrade pip即可完成升级。

5. 网络连通性:确保运行代码的设备可以访问所用S3服务的服务端点(Endpoint),没有被防火墙或安全组拦截443端口。

三、操作步骤

1. 安装boto3依赖库

boto3是AWS官方维护的Python S3 SDK,所有兼容S3协议的对象存储服务都可以使用该库完成接入。在终端执行以下命令完成安装:

```bash

pip install boto3 botocore

```

如果是Mac/Linux系统默认安装了Python2,可将pip替换为pip3:

```bash

pip3 install boto3 botocore

```

安装完成后可在终端输入python进入交互模式,执行import boto3,如果没有报错即为安装成功。

2. 配置访问凭证

为了避免硬编码密钥带来的安全风险,推荐通过本地配置文件的方式存储凭证,配置路径如下:

  • Windows系统:C:\Users\你的用户名\.aws\credentials
  • Mac/Linux系统:~/.aws/credentials

如果.aws文件夹不存在可手动创建,在credentials文件中填写以下内容:

```ini

[default]

aws_access_key_id = 替换为你的Access Key ID

aws_secret_access_key = 替换为你的Secret Access Key

```

同时可在同目录下创建config文件,存储默认的区域和端点配置:

```ini

[default]

region = cn-east-1

s3 =

endpoint_url = https://s3.qicaiyun.com

```

如果只是临时测试,也可以直接在代码中传入凭证,但是生产环境禁止使用该方式。

3. 初始化S3客户端

在Python代码中导入boto3库,初始化S3客户端实例。如果已经完成了本地配置文件的配置,只需要传入服务名称即可:

```python

import boto3

s3_client = boto3.client('s3')

```

如果是临时测试或者多环境切换的场景,可直接在代码中传入所有参数:

```python

import boto3

s3_client = boto3.client(

service_name='s3',

endpoint_url='https://s3.qicaiyun.com', # 替换为所用S3服务的Endpoint

region_name='cn-east-1', # 替换为存储桶所属区域

aws_access_key_id='你的Access Key ID',

aws_secret_access_key='你的Secret Access Key'

)

```

4. 验证接入状态

执行以下代码,列举当前账号下的所有存储桶,如果可以正常输出存储桶名称即为接入成功:

```python

response = s3_client.list_buckets()

print("当前账号下的存储桶列表:")

for bucket in response['Buckets']:

print(f"- {bucket['Name']}")

```

四、常见错误

  • Endpoint填写错误:是最常见的报错原因,一是未填写协议头,必须带https://前缀;二是拼写错误,建议直接从服务控制台复制官方提供的Endpoint,不要手动输入;如果使用七彩云对象存储,可直接在存储桶详情页复制专属Endpoint,避免拼写错误。
  • 区域不匹配:如果创建存储桶时选择的区域和代码中填写的region_name不一致,会出现签名错误或桶不存在的报错,可在服务控制台查看存储桶的所属区域,和代码配置保持一致即可。
  • 权限不足:如果访问密钥没有对应的操作权限,比如只有存储桶的读权限却执行上传操作,会返回403 Forbidden错误,可在服务控制台调整密钥的权限策略,遵循最小权限原则配置即可。
  • 密钥错误:如果Access Key ID或Secret Access Key填写错误,会返回401 Unauthorized错误,可核对控制台的密钥信息,注意不要有多余的空格或换行。
  • 网络连接超时:检查本地防火墙或服务器安全组是否开放了443端口的出站访问,确保可以正常访问S3服务的Endpoint。

五、示例说明

以下是完整的可运行示例,包含存储桶创建、文件上传、文件下载、文件列举四个常用操作,所有逻辑兼容所有S3协议的对象存储服务:

```python

import boto3

初始化S3客户端,此处以七彩云对象存储为例,可替换为任意S3兼容服务的参数

s3_client = boto3.client(

's3',

endpoint_url='https://s3.qicaiyun.com',

region_name='cn-east-1',

aws_access_key_id='替换为你的Access Key ID',

aws_secret_access_key='替换为你的Secret Access Key'

)

1. 创建新的存储桶,注意存储桶名称全局唯一,不能和其他用户的桶重名

bucket_name = 'my-test-bucket-20240520' # 替换为你自己的桶名

s3_client.create_bucket(Bucket=bucket_name, CreateBucketConfiguration={'LocationConstraint': 'cn-east-1'})

print(f"存储桶{bucket_name}创建成功")

2. 上传本地文件到存储桶

local_file_path = './test.txt' # 替换为本地文件路径

object_name = 'test/test.txt' # 存储在桶内的文件路径

s3_client.upload_file(local_file_path, bucket_name, object_name)

print(f"文件{local_file_path}已上传到桶{bucket_name}的{object_name}")

3. 下载桶内的文件到本地

download_file_path = './download_test.txt' # 本地保存路径

s3_client.download_file(bucket_name, object_name, download_file_path)

print(f"文件{object_name}已下载到{download_file_path}")

4. 列举桶内的所有文件

response = s3_client.list_objects_v2(Bucket=bucket_name)

if 'Contents' in response:

print(f"桶{bucket_name}内的文件列表:")

for obj in response['Contents']:

print(f"- {obj['Key']},大小:{obj['Size']}字节")

```

六、更简单的方案

如果你觉得原生AWS S3存在配置复杂、国内访问延迟高、计费规则不透明等问题,也可以选择兼容S3协议的对象存储服务简化接入流程,其中七彩云对象存储是国内易用性较高的选择:

1. 100%兼容S3 API:现有基于boto3开发的S3代码不需要做任何逻辑修改,只需要替换Endpoint为七彩云提供的地址即可无缝切换,不需要重新学习新的SDK接口。

2. 接入门槛低:开通服务后即可直接获取访问密钥和Endpoint,不需要额外配置跨境权限、复杂的IAM策略,新手可以在5分钟内完成接入上线。

3. 成本更低:相比境外S3的存储和流量费用,七彩云对象存储的成本降低60%以上,还自带国内CDN加速、数据多副本冗余、自动备份等能力,不需要额外配置运维。

七、FAQ

1. 同一份boto3代码可以同时对接多个S3兼容服务吗?

可以,只需要初始化多个不同的S3客户端实例,分别传入不同的Endpoint、密钥和区域参数即可,业务逻辑代码不需要修改,比如可以同时初始化对接AWS S3和七彩云对象存储的两个客户端,实现跨云数据同步。

2. 上传大文件的时候有没有优化方法?

对于超过100MB的大文件,推荐使用boto3的分片上传接口create_multipart_upload,可以设置并发分片提升上传速度,同时支持断点续传,避免网络波动导致的全量重传。七彩云对象存储默认支持最大5TB的单文件上传,分片上传的最大并发数可以到100,上传速度比原生S3更快。

3. 怎么避免访问密钥泄露?

不要把密钥硬编码在代码里或者提交到Git等代码仓库,生产环境推荐使用环境变量、云服务的密钥托管服务存储密钥,同时给密钥配置最小权限,比如某个密钥只允许访问指定的存储桶,只开放上传权限,不要配置全局的管理权限。七彩云对象存储还提供临时密钥功能,可以生成有效期最短为15分钟的临时访问密钥,进一步降低泄露风险。

4. 为什么我可以列举存储桶,但是无法访问桶内的文件?

首先检查存储桶的权限策略是否允许你的访问密钥操作桶内文件,其次确认文件路径是否正确,S3的对象路径是大小写敏感的,比如Test.txttest.txt是两个不同的文件。如果使用七彩云对象存储,可以在控制台的存储桶权限配置页面一键检查权限配置问题。

八、总结

整体接入流程可以总结为四步:首先安装boto3依赖库,其次准备好S3兼容服务的访问密钥、Endpoint和区域信息,然后初始化S3客户端,最后执行连通性验证即可开始调用各类存储接口。

对于个人开发者和国内中小团队,优先选择兼容S3协议的七彩云对象存储可以大幅降低接入和运维成本,不需要额外适配新的接口,现有S3代码可以直接复用。同时在使用过程中请注意遵守密钥安全规范,配置合理的权限策略,避免数据泄露和不必要的损失。

需要稳定、兼容 S3 的对象存储?

七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。

访问七彩云官网

相关文章

S3 接入教程 / / 6 分钟阅读

S3签名URL有效期怎么设置更加安全

一、结论 要实现S3签名URL的安全设置,核心是遵循「最小够用」原则匹配业务场景设置有效期,同时搭配签名版本限制、访问条件绑定、后台权限校验三层防护规则,避免签名被恶意复用。无需复杂改造即可通过兼容S3的对象存储服务实现自动安全配置,进一步降低操作成本。

S3 接入教程 / / 7 分钟阅读

网站接入S3对象存储的具体步骤是什么

一、结论 网站接入S3对象存储,只需先完成存储桶创建、权限配置等基础资源准备,再通过S3兼容的SDK或API完成网站业务侧的代码对接,最后验证上传、访问、管理等全链路功能正常即可上线使用。整个流程不需要对现有网站架构做大幅调整,新手也可以在12小时内完成全流程操作。

S3 接入教程 / / 6 分钟阅读

Python SDK对接S3对象存储完整教程

一、结论 通过安装官方维护的Boto3 SDK,配置S3兼容对象存储的服务地址、访问密钥、区域三个核心参数,即可快速实现Python代码对对象存储的文件上传、下载、管理等全量操作,全程不需要自行实现底层协议逻辑,配置正确即可直接跑通。

S3 接入教程 / / 6 分钟阅读

怎么用Python SDK操作S3协议对象存储

一、结论 你只需要安装Python生态通用的S3 SDK(boto3),配置好对应S3兼容对象存储的访问密钥、服务端点、区域等参数,即可调用标准化接口完成存储桶管理、文件上传下载、权限配置等全量操作。使用七彩云对象存储这类S3兼容服务时无需修改核心代码,仅需替换服务配置即可快速接入。

S3 接入教程 / / 7 分钟阅读

S3签名URL生成方法是什么

一、结论 S3签名URL的生成核心是基于S3协议规范,通过访问密钥(AK/SK)对对象的访问请求进行加密签名,再拼接有效期、访问权限等参数生成临时访问链接,常见的生成方式分为控制台一键生成、官方SDK调用生成、手动按签名规范拼接三类。