📜  烧瓶上传文件到 s3 - Python (1)

📅  最后修改于: 2023-12-03 15:27:04.732000             🧑  作者: Mango

烧瓶上传文件到 S3 - Python

本文将介绍如何使用 Python Flask 和 Boto3 库将文件上传到 Amazon S3 服务中。Amazon S3 是一种对象存储服务,可以存储和检索各种类型的数据,包括文本和图像文件。

环境

在开始之前,需要确认您已经开通了 Amazon S3 账户,并生成了访问令牌。

本文使用 Python 3.x 版本。此外,需要安装以下包:

  • Flask
  • Boto3

您可以使用 pip 包安装管理器来安装这些依赖项:

pip install Flask Boto3
创建 Flask 应用

首先,我们需要创建一个基本的 Flask 应用程序。打开你的终端,并切换到你要创建应用程序的目录下。然后,创建一个新的文件,并命名为 app.py

app.py 中,我们首先导入 Flask 模块并初始化应用程序:

from flask import Flask

app = Flask(__name__)

然后,我们定义一个首页路由并返回一条简单的 Hello World! 消息:

@app.route('/')
def index():
    return 'Hello World!'

最后,我们添加一个 if 块以确保应用程序是通过 app.py 运行的:

if __name__ == '__main__':
    app.run()

现在,我们可以在终端中启动此应用程序 (python app.py) 并访问 http://localhost:5000 来查看结果。

连接到 Amazon S3

接下来,我们需要使用 Boto3 库连接到 Amazon S3 服务。在 app.py 中,导入 Boto3 并按以下方式初始化 S3 客户端:

import boto3

s3 = boto3.client(
    's3',
    aws_access_key_id='<your_aws_access_key_id>',
    aws_secret_access_key='<your_aws_secret_access_key>',
    region_name='<your_aws_s3_region>'
)

请确保您在代码中替换正确的 AWS 访问密钥 ID、密码和区域名称。

处理上传请求

现在,我们已经连接到 Amazon S3 服务,我们需要处理来自客户端的文件上传请求。

首先,我们需要创建一个 HTML 表单,使用户可以选择要上传的文件。在 index() 路由中返回以下内容:

from flask import Flask, render_template, request

@app.route('/', methods=['GET'])
def index():
    return render_template('index.html')

然后,我们在 Flask 应用程序中创建一个新目录 templates,并在其中创建一个新文件 index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Upload File to S3</title>
</head>
<body>
    <form action="/" method="POST" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit">
    </form>
</body>
</html>

这将显示一个简单的表单,允许用户选择要上传的文件。

现在,我们需要为 POST 请求处理表单提交。在 app.py 中,添加以下代码:

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        file = request.files['file']
        s3.upload_fileobj(file, '<your_aws_bucket_name>', file.filename)
        return 'File uploaded successfully'
    else:
        return render_template('index.html')

在这段代码中,我们检查请求是否为 POST 请求。如果是,我们从表单中获取文件对象,并使用 upload_fileobj() 函数上传文件到 S3 中。

请确保您在代码中替换正确的 AWS 存储桶名称。

最后,当文件上传成功时,我们返回一个简单的消息。

部署您的 Flask 应用程序并测试它,您应该能够选择一个文件并将其上传到 Amazon S3 服务中。

结论

在本文中,我们介绍了如何使用 Flask 和 Boto3 库将文件上传到 Amazon S3 服务中。我们首先创建了一个 Flask 应用程序,并连接到 AWS S3 服务,然后处理了来自客户端的文件上传请求。

通过本文,您应该可以理解如何使用 Flask 和 Boto3 库来处理文件上传请求,并将文件上传到 Amazon S3 服务中。