如何使用 Python 上传和下载 AWS S3 文件?


Amazon Web Services (AWS) 提供各种服务,例如 EC2、S3、AWS Lambda 和 Amazon SageMaker。公司使用这些 Amazon 服务来存储其数据库并部署其模型。在本文中,我们将讨论简单存储服务 (S3) 并解释如何从 Amazon S3 上传和下载文件。

AWS S3

简单存储服务 (S3) 用于在云中存储各种文件。它安全、简单且经济高效。在 S3 中,有存储文件的存储桶,例如图像、文件夹、视频和音频文件。我们可以在 S3 上以不同的方式存储、下载和上传文件。

  • AWS SDK - 它是一个标准开发工具包。它是以编程方式控制 AWS 的一种方法。
  • AWS CLI - 它是控制 AWS 的命令行界面。我们将其用于客户端-服务器通信。
  • AWS 控制台 - 它是一个图形用户界面。我们使用它来使用按钮进行上传和下载。非常简单。

我们可以通过不同的方式在 AWS S3 上下载和上传文件,但本文将讨论使用 Python 代码的最简单方法。以下是一些在此小型项目中工作的先决条件。如果您不了解这些工具和技术,可以在 TutorialsPoint 上阅读相关内容。您的系统上应该安装了 Python 3 和 VS Code。

您还需要一个 AWS 账户。请注意,AWS 提供付费服务,但在某些条件下,您可以注册并免费使用这些服务。如果您没有 AWS 账户,您可以使用 此链接 (https://aws.amazon.com/free) 注册并登录。请注意,即使免费使用 AWS 服务,您也需要输入您的信用卡或借记卡信息。使用 AWS 服务时应谨慎,因为在不满足某些条件时可能会产生费用。

创建并登录您的 AWS 账户后,搜索并点击 S3。

然后,在 S3 内创建一个存储桶。

现在,选择存储桶的名称。在本教程中,我们已选择“tutorialspoint-bucket”作为存储桶的名称。

现在,如果您希望备份此存储桶,请点击存储桶版本控制下的启用复选框。否则,将其保留为默认设置。我们选择了禁用选项,因为我们只希望在本教程中备份此存储桶。我们将在教程结束后删除此“tutorialspoint-bucket”。

点击创建存储桶按钮以创建此存储桶。

您的存储桶将被创建并在那里列出。我们将使用此存储桶来存储我们的文件或数据,我们可以使用 Python 代码从那里下载或上传数据。最初,您的存储桶将为空。

使用 Python 将文件上传到 AWS S3

我们将使用 VS Code 来编写我们的 Python 代码。我们将使用 Boto3 包来连接 AWS 和本地 Python 代码。Boto3 是 Python 中用于直接与 AWS 服务交互的 SDK。首先,我们将为此项目在 VS Code 中创建一个环境。使用以下命令创建环境

python -m venv venv

这将创建一个 venv 文件夹。使用以下命令激活此环境

venv\Scripts\activate

现在,安装 boto3 以直接与 AWS 服务交互。使用以下 pip 命令在此环境中安装它

pip install boto3

现在,您可以在 Python 代码中导入并使用它。

生成访问密钥和密钥

如果您想授予其他人权限,则需要使用 IAM(身份和访问管理)创建密钥和访问密钥。由于我们想允许此 Python 代码访问此存储桶以上传和下载文件,因此我们将在 IAM 仪表板下创建一个用户以生成访问密钥和密钥。

搜索 IAM 并点击它。

点击 IAM 仪表板左侧的用户。

点击创建用户按钮以创建用户。

为您的用户命名。我们已选择“tutorialspoint-user”。然后点击下一步。

点击“直接附加策略”。然后在给定的搜索框中搜索“S3”,并点击“AmazonS3FullAccess”复选框以授予您的 Python 代码完全权限。

点击下一步。

点击创建用户按钮。

您的用户“tutorialspoint-user”将被创建并在用户下列出。

点击此用户以创建其访问密钥,然后点击创建访问密钥。

点击“本地代码”,因为我们的代码是本地的(系统)。请注意,如果您的代码位于另一台服务器上,则需要点击命令行界面 (CLI)。但在这里,我们将点击本地代码,然后点击“确认”复选框以接受它,然后点击下一步。

提供您的描述标签值。我们已选择“tutorialspoint”作为其描述标签值。然后点击创建访问密钥。

它将为此用户(即 tutorialspoint-user)创建访问密钥和密钥。请注意,您不应与任何人共享这些值,因为这些是密钥。否则,其他人可能会滥用它,并且亚马逊会向您收取巨额费用,因此请谨慎使用。我们将在 Python 代码中使用这些密钥在 AWS S3 上上传和下载文件。我们将在本教程结束后从 AWS 中删除这些密钥 -

现在在上面的搜索中搜索 S3 并点击它,然后点击您的存储桶。此存储桶中不存在任何文件和文件夹 -

现在,您可以使用以下代码检查此存储桶中是否存在任何文件和文件夹 -

import boto3

# Create S3 resource
s3 = boto3.resource(
   service_name='s3',
   region_name='ap-south-1',
   aws_access_key_id='your-created-access-key',
   aws_secret_access_key='your-created-secret-access-key'
)

# Specify the bucket name
bucket_name = 'tutorialspoint-bucket'

# Access the bucket
bucket = s3.Bucket(bucket_name)

# Print all files and folders
print(f"Files and folders in the bucket '{bucket_name}':")
for obj in bucket.objects.all():
   print(obj.key)

由于最初不存在任何文件,因此输出将为空 -

现在,将您的图像或文件放在代码文件夹中,以便上传到 AWS S3。我们将使用“tutorialspoint-logo.png”图像上传到我们的“tutorialspoint-bucket”存储桶中 -

您可以使用以下代码将您的文件上传到您的 AWS S3 存储桶中 -

import boto3

# Create S3 resource
s3 = boto3.resource(
   service_name='s3',
   region_name='ap-south-1',
   aws_access_key_id='your-created-access-key',
   aws_secret_access_key='your-created-secret-access-key'
)

# Specify the bucket name and file details
bucket_name = 'tutorialspoint-bucket'
file_name = 'tutorialspoint-logo.png'  # Local file to upload
s3_key = 'tutorialspoint-logo.png'  # S3 object key (path in the bucket)

# Upload the file
try:
   s3.Bucket(bucket_name).upload_file(Filename=file_name, Key=s3_key)
   print(f"'{file_name}' has been uploaded to bucket '{bucket_name}' as '{s3_key}'.")
except Exception as e:
   print(f"Error uploading file: {e}")

我们已将 tutorialspoint-logo.png 图像上传到我们的“tutorialspoint-bucket”存储桶中 -

您可以进入 AWS S3 中的存储桶,并检查您的文件是否已成功上传 -

使用 Python 从 AWS S3 下载文件

现在,我们将使用 Python 代码将此相同的上载文件下载到我们的本地机器上 -

import boto3

# Create S3 resource
s3 = boto3.resource(
   service_name='s3',
   region_name='ap-south-1',
   aws_access_key_id='your-created-access-key',
   aws_secret_access_key='your-created-secret-access-key'
)

# Specify the bucket name and file details
bucket_name = 'tutorialspoint-bucket'
s3_key = 'tutorialspoint-logo.png'  # S3 object key (path in the bucket)
download_path = 'downloaded-tutorialspoint-logo.png'  # Local path to save the file

# Download the file
try:
    s3.Bucket(bucket_name).download_file(Key=s3_key, Filename=download_path)
    print(f"File '{s3_key}' has been downloaded from bucket '{bucket_name}' to local path '{download_path}'.")
except Exception as e:
    print(f"Error downloading file: {e}")
此代码将从您的 AWS S3 存储桶(即 tutorialspoint-bucket)下载您的文件(即 tutorialspoint-logo.png)到您的本地 -

它将在本地下载文件,如您所见,代码文件夹中存在“downloaded-tutorialspoint-logo.png”。

结论

在本文中,我们讨论了如何使用 Python 代码和 VS code 将文件从 AWS S3 上传和下载到本地。我们使用了 boto3 来连接 AWS S3 和本地 Python 代码。我们已经逐步进行了讨论,以便任何人都可以轻松理解。

常见问题解答(常见问题)

简单存储服务 (S3) 是 Amazon AWS 基于云的存储平台,我们可以在 AWS S3 云平台上上传和下载我们的文件和数据。我们使用 AWS S3 内部的存储桶来上传和下载文件和数据。

答:是的,AWS 在其条件下也为您提供免费套餐。您可以使用此链接创建和使用其免费套餐 - https://aws.amazon.com/free

有多种方法可以从 AWS S3 上传和下载。您可以在 Python 代码中使用 boto3 库,并在代码中提供访问密钥和密钥。这是使用 Python 从 AWS S3 上传和下载文件的一种简单方法。

更新于: 2024年11月13日

48 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告