coreHTTP 基本 Amazon S3 上传演示 - FreeRTOS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

coreHTTP 基本 Amazon S3 上传演示

Introduction

此示例演示如何将 PUT 请求发送到 Amazon Simple Storage Service (Amazon S3) HTTP 服务器并上传一个小文件。它还会执行 GET 请求以在上传后验证文件大小。此示例使用网络传输接口,该接口使用 mbedTLS 在运行 IoT 的 coreHTTP 设备客户端与 Amazon S3 HTTP 服务器之间建立经相互身份验证的连接。

注意

要设置和运行 FreeRTOS 演示,请按照开始使用 FreeRTOS中的步骤操作。

单线程与多线程

有两种 coreHTTP 使用模型:单线程多线程(多任务处理)。虽然此部分中的演示在线程中运行 HTTP 库,但它实际上演示了如何在单个线程环境中使用 coreHTTP。此演示中只有一个任务使用 HTTP API。虽然单线程应用程序必须重复调用 HTTP 库,但多线程应用程序可以在代理 (或 守护程序) 任务的后台发送 HTTP 请求。

源代码组织

演示源文件名为 http_demo_s3_upload.c,可以在 freertos/demos/coreHTTP/ 目录和 GitHub 网站上找到它。

配置 Amazon S3 HTTP 服务器连接

此演示使用预签名 URL 连接到 Amazon S3 HTTP 服务器并授权访问要下载的对象。HTTP 服务器的 TLS 连接仅使用服务器身份验证。Amazon S3在应用程序级别,将使用预签名 URL 查询中的参数对对象访问进行身份验证。按照以下步骤配置到 AWS 的连接。

  1. 设置 AWS 账户:

    1. 如果您尚未创建 账户,AWS 将创建一个 账户。

    2. 使用 AWS Identity and Access Management (IAM) 设置账户和权限。您可以使用 IAM 管理您账户中每个用户的权限。默认情况下,用户在根所有者授予权限之前没有权限。

      1. 要将 IAM 用户添加到您的 AWS 账户,请参阅 IAM 用户指南

      2. 通过添加此策略,向您的 AWS 账户授予权限以访问 FreeRTOS 和 AWS IoT:

        • AmazonS3FullAccess

  2. 按照 Amazon S3 中的如何创建 S3 存储桶?中的步骤在 Amazon Simple Storage Service 控制台用户指南 中创建存储桶。

  3. 按照Amazon S3如何将文件和文件夹上传到 S3 存储桶?中的步骤将文件上传到

  4. 使用位于 FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/presigned_urls_gen.py 文件中的脚本生成预签名 URL。

    有关使用说明,请参阅 FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generato/README.md 文件。

Functionality

该演示首先使用 TLS 服务器身份验证连接到 Amazon S3 HTTP 服务器。然后,它创建 HTTP 请求以上传在 democonfigDEMO_HTTP_UPLOAD_DATA 中指定的数据。 上传文件后,它通过请求文件大小来检查文件是否已成功上传。演示的源代码可在 GitHub 网站中找到。

连接到 Amazon S3 HTTP 服务器

connectToServerWithBackoffRetries 函数尝试与 HTTP 服务器建立 TCP 连接。如果连接失败,它会在超时后重试。超时值将以指数方式增加,直到达到最大尝试次数或达到最大超时值。如果在配置的尝试次数后无法建立与服务器的 TCP 连接,connectToServerWithBackoffRetries 函数将返回失败状态。

函数演示如何仅使用服务器身份验证与 prvConnectToServer HTTP 服务器建立连接。Amazon S3它使用在 mbedTLS 文件中实现的基于 FreeRTOS-Plus/Source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using_mbedtls.c 的传输接口。可在 prvConnectToServerGitHub 网站上找到 的定义。

上传数据

函数演示如何创建 PUT 请求并指定要上传的文件。prvUploadS3ObjectFile在其中上传文件的 Amazon S3 存储桶和要上传的文件的名称在预签名 URL 中指定。为了节省内存,为接收响应,对请求标头使用了同一缓冲区。使用 HTTPClient_Send API 函数同步接收响应。响应状态代码应该来自 200 OK HTTP 服务器。Amazon S3任何其他状态代码都是错误。

可在 prvUploadS3ObjectFile() GitHub 网站中找到 的源代码。

验证上传

函数调用 prvVerifyS3ObjectFileSize 以检索 S3 存储桶中对象的大小。prvGetS3ObjectFileSizeHTTP 服务器当前不支持使用预签名 URL 的 HEAD 请求,因此请求第 0 个字节。Amazon S3该文件的大小包含在响应的 Content-Range 标头字段中。服务器需要 206 Partial Content 响应。任何其他响应状态代码都是错误。

可在 prvGetS3ObjectFileSize() GitHub 网站中找到 的源代码。