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

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

CoreHttp 基本 Amazon S3 上传演示

介绍

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

注意

要设置和运行 FreeRTOS 演示,请按照中的步骤操作入门.

单线程与多线程

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

源代码组织

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

配置 Amazon S3 HTTP 服务器连接

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

  1. 设置Amazon账户:

    1. 如果您尚未设置,创建Amazon帐户.

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

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

      2. 向你的授予权限Amazon账户访问 FreeRTOS 和Amazon 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文件。

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

功能

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

连接到 Amazon S3 HTTP 服务器

这些区域有:使用退避重试连接到服务器函数尝试与 HTTP 服务器建立 TCP 连接。如果连接失败,则会在超时后重试。在达到最大尝试次数或达到最大超时值之前,超时值将呈指数级增加。这些区域有:connectToServerWithBackoffRetries如果在配置的尝试次数之后无法建立与服务器的 TCP 连接,则函数返回失败状态。

这些区域有:prvConnectToServer函数演示了如何仅使用服务器身份验证来建立与 Amazon S3 HTTP 服务器的连接。它使用基于 mbedTLS 的传输接口,该接口在FreeRTOS-Plus/Source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using_mbedtls.c文件。定义prvConnectToServer可以在以下网站找到GitHub网站.

上传数据

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

用于的源代码prvUploadS3ObjectFile()可以在以下网站找到GitHub网站.

验证上传

这些区域有:prvVerifyS3ObjectFileSize函数调用prvGetS3ObjectFileSize以检索 S3 存储桶中对象的大小。Amazon S3 HTTP 服务器目前不支持使用预签名 URL 的 HEAD 请求,因此请求第 0 个字节。文件的大小包含在响应的Content-Range标头字段。一个206 Partial Content预计来自服务器的响应。任何其他响应状态代码都是错误的。

用于的源代码prvGetS3ObjectFileSize()可以在以下网站找到GitHub网站.