怎样在 Python 中使用 Vultr 对象存储

介绍

Vultr 对象存储是一种高度可扩展的存储解决方案。 它使您可以灵活地按需添加可扩展存储并通过 S3 API 对其进行管理。 它提供了一个平台来存储大量文件,而无需担心处理文件系统的底层复杂性。 它通过将文件冗余保存在多个位置来确保文件的安全性,这使其成为可靠的存储解决方案。

您可以使用 Boto3 在 Python 应用程序中使用对象存储,这是一个 Python 库,使开发人员能够与 S3 API 交互,以编程方式管理对象存储。

本文演示了怎样使用 Python 和 Boto3 SDK 以编程方式执行常见操作,例如创建或删除存储桶和对象。

先决条件

  • Vultr 对象存储 在您的帐户中配置.
  • 对象存储的访问密钥和密钥。
  • Python,版本 3.6 或更高版本。

安装 Boto3 SDK

安装 boto3 使用 Python 包管理器。

pip install boto3

创建 Boto3 客户端

要将 Vultr 对象存储与 Boto3 一起使用,您需要使用 S3 凭证创建一个 Boto3 客户端实例。 在以下步骤中,您将使用此客户端对对象存储执行操作。 用您的凭据替换前三个变量。

import boto3

hostname = "HOSTNAME"
secret_key = "SECRET_KEY"
access_key = "ACCESS_KEY"

session = boto3.session.Session()
client = session.client('s3', **{
    "region_name": hostname.split('.')[0],
    "endpoint_url": "https://" + hostname,
    "aws_access_key_id": access_key,
    "aws_secret_access_key": secret_key
})

桶操作

存储桶就像传统文件系统中的文件夹。 您需要在对象存储中至少有一个存储桶才能在其上上传文件。 您的存储桶的名称在区域范围内应该是唯一的,您可以通过在名称中添加随机前缀来实现,例如 example, 11293x-name.

列出所有存储桶

使用 list_buckets() 方法来检索对象存储中的存储桶列表。

response = client.list_buckets()
print(response)

创建一个新存储桶

使用 create_bucket() 在对象存储中创建新存储桶的方法。

response = client.create_bucket(Bucket="example-bucket")
print(response)

删除空桶

使用 delete_bucket() 从对象存储中删除空存储桶的方法。

response = client.delete_bucket(Bucket="example-bucket")
print(response)

删除非空存储桶

要删除非空存储桶,您需要通过迭代可用对象列表来删除其中的所有对象。

object_list = client.list_objects(Bucket="example-bucket")

for object in object_list['Contents']:
    client.delete_object(Bucket="example-bucket", Key=object['Key'])

response = client.delete_bucket(Bucket="example-bucket")
print(response)

对象操作

存储在存储桶中的对象,例如传统文件系统中的文件。 在 S3 API 中,key 是文件名,body 是文件的字节内容。

列出所有对象

使用 list_objects() 方法来检索存储桶中的对象列表。

response = client.list_objects(Bucket="example-bucket")
print(response)

下载对象

使用 download_file() 从存储桶下载对象的方法。

response = client.download_file('example-bucket', 'file.ext', 'path/to/local-file/name.ext')
print(response)

上传新对象

使用 put_object() 方法将新文件上传到存储桶。

with open('path/to/file/name.ext', 'rb') as file:
    response = client.put_object(Bucket="example-bucket", Key='file.ext', Body=file, ACL='private')

print(response)

设置 ACL 参数为 public-read 如果您希望对象可公开访问。

删除对象

使用 delete_object() 从存储桶中删除对象的方法。

response = client.delete_object(Bucket="example-bucket", Key='path/to/object/name.ext')
print(response)

创建预签名 URL

预签名 URL 将对象的临时访问权限授予没有凭据或访问对象权限的用户。

创建预签名 URL 以下载文件

使用 generate_presigned_url() 生成预签名 URL 以下载文件的方法。

response = client.generate_presigned_url(ClientMethod='get_object',
                                Params={'Bucket': 'example-bucket',
                                        'Key': 'file.ext'},
                                ExpiresIn=300)

print(response)

ExpiresIn 参数接受一个整数值,定义预签名 URL 的有效秒数。

创建预签名 URL 以上传文件

使用 generate_presigned_url() 方法来生成预签名 URL 以上传新文件。

response = client.generate_presigned_url(ClientMethod='put_object',a
                                Params={'Bucket': 'example-bucket',
                                        'Key': 'new-file.ext'},
                                ExpiresIn=300)

print(response)

ExpiresIn 参数接受一个整数值,定义预签名 URL 的有效秒数。

结论

在本文中,您学习了怎样使用 Python 和 Boto3 SDK 以编程方式执行常见操作,例如创建或删除存储桶和对象。 更多Boto3相关信息,请访问官方 Boto3 文档.

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com