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

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

CoreHTTP 基本Amazon S3 上传演示

重要

此演示托管在 Amazon-FreeRTOS 存储库中,该存储库已过时。建议您创建新项目时从这里开始。如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的 FreeRTOS 项目,请参阅亚马逊 FreeRTOS Github 存储库迁移指南

介绍

该示例演示如何将 PUT 请求发送到Amazon Simple Storage Service (Amazon S3) HTTP 服务器发送PUT 请求,以及如何上传一个小文件。它还会在上传后执行 GET 请求,以验证文件的大小。此示例使用网络传输接口,该接口使用 mbedTLS 在运行 CoreHTTP 的 IoT 设备客户端与 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 服务器并授权访问要下载的对象。Amazon S3 HTTP 服务器的 TLS 连接仅使用服务器身份验证。在应用程序级别,使用预签名 URL 查询中的参数对对象的访问进行身份验证。按照下述步骤操作,将您的连接配置为Amazon。

  1. 设置Amazon账户:

    1. 如果您尚不了解,请创建一个Amazon帐户

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

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

      2. 授予您的Amazon账户访问 FreeRTOSAmazon IoT 的权限,并添加以下政策:

        • 亚马逊 S3FullAccess

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

  3. 按照如何将文件和文件夹上传至 Amazon S3 存储桶?中的步骤将文件上载到 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_generator/README.md文件。

功能

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

连接到Amazon S3 HTTP 服务器

connectToServerWithBackoffRetries函数尝试与 HTTP 服务器建立 TCP 连接。如果连接失败,它会在超时后重试。在达到最大尝试次数或达到最大超时值之前,超时值将呈指数级增长。如果在配置的尝试次数后无法建立与服务器的 TCP 连接,则该connectToServerWithBackoffRetries函数将返回失败状态。

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

上传数据

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

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

验证上传

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

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