coreHTTP 基本 Amazon S3 上传演示 - FreeRTOS

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

coreHTTP 基本 Amazon S3 上传演示

重要

这是《FreeRTOS 用户指南》的存档版本,可用于 FreeRTOS 版本 202012.00。有关本文档的最新版本,请参阅《FreeRTOS 用户指南》

简介

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

注意

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

单线程与多线程

coreMQTT 有两种使用模式,即单线程多线程(多任务处理)。尽管本节中的演示在线程中运行 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 查询中的参数对对象的访问进行身份验证。请按照以下步骤配置与 AWS的连接。

  1. 设置 AWS 账户:

    1. 如果您还没有,请创建一个 AWS 账户

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

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

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

        • 亚马逊 3 FullAccess

  2. 按照《Amazon Simple Storage Service 用户指南》如何创建 S3 存储桶中的步骤,在 Amazon S3 中创建一个存储桶。

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

功能

首先,此演示使用 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网站上找到。