如何使用 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 代码中导入并使用它。
Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.
生成访问密钥和密钥
如果您想授予其他人权限,则需要使用 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 代码将此相同的上载文件下载到我们的本地机器上 -
此代码将从您的 AWS S3 存储桶(即 tutorialspoint-bucket)下载您的文件(即 tutorialspoint-logo.png)到您的本地 -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}")
它将在本地下载文件,如您所见,代码文件夹中存在“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 上传和下载文件的一种简单方法。