本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
coreHTTP 基本 Amazon S3 上传演示
Introduction
此示例演示如何将 PUT 请求发送到 Amazon Simple Storage Service (Amazon S3) HTTP 服务器并上传一个小文件。它还会执行
GET 请求以在上传后验证文件大小。此示例使用网络传输接口
要设置和运行 FreeRTOS 演示,请按照开始使用 FreeRTOS中的步骤操作。
单线程与多线程
有两种 coreHTTP 使用模型:单线程 和多线程(多任务处理)。虽然此部分中的演示在线程中运行 HTTP 库,但它实际上演示了如何在单个线程环境中使用 coreHTTP。此演示中只有一个任务使用 HTTP API。虽然单线程应用程序必须重复调用 HTTP 库,但多线程应用程序可以在代理 (或 守护程序) 任务的后台发送 HTTP 请求。
源代码组织
演示源文件名为 http_demo_s3_upload.c
,可以在
目录和 GitHubfreertos
/demos/coreHTTP/
配置 Amazon S3 HTTP 服务器连接
此演示使用预签名 URL 连接到 Amazon S3 HTTP 服务器并授权访问要下载的对象。HTTP 服务器的 TLS 连接仅使用服务器身份验证。Amazon S3在应用程序级别,将使用预签名 URL 查询中的参数对对象访问进行身份验证。按照以下步骤配置到 AWS 的连接。
-
设置 AWS 账户:
-
如果您尚未创建 账户,AWS 将创建一个
账户。 -
使用 AWS Identity and Access Management (IAM) 设置账户和权限。您可以使用 IAM 管理您账户中每个用户的权限。默认情况下,用户在根所有者授予权限之前没有权限。
-
要将 IAM 用户添加到您的 AWS 账户,请参阅 IAM 用户指南
。 -
通过添加此策略,向您的 AWS 账户授予权限以访问 FreeRTOS 和 AWS IoT:
-
AmazonS3FullAccess
-
-
-
-
按照 Amazon S3 中的如何创建 S3 存储桶?中的步骤在 Amazon Simple Storage Service 控制台用户指南 中创建存储桶。
-
按照Amazon S3如何将文件和文件夹上传到 S3 存储桶?中的步骤将文件上传到 。
-
使用位于
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 连接。connectToServerWithBackoffRetries
函数将返回失败状态。
函数演示如何仅使用服务器身份验证与 prvConnectToServer
HTTP 服务器建立连接。Amazon S3它使用在 mbedTLS 文件中实现的基于 FreeRTOS-Plus/Source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using_mbedtls.c
的传输接口。可在 prvConnectToServer
GitHub 网站上找到
上传数据
函数演示如何创建 PUT 请求并指定要上传的文件。prvUploadS3ObjectFile
在其中上传文件的 Amazon S3 存储桶和要上传的文件的名称在预签名 URL 中指定。为了节省内存,为接收响应,对请求标头使用了同一缓冲区。使用 HTTPClient_Send
API 函数同步接收响应。响应状态代码应该来自 200 OK
HTTP 服务器。Amazon S3任何其他状态代码都是错误。
可在 prvUploadS3ObjectFile()
GitHub 网站中找到
验证上传
函数调用 prvVerifyS3ObjectFileSize
以检索 S3 存储桶中对象的大小。prvGetS3ObjectFileSize
HTTP 服务器当前不支持使用预签名 URL 的 HEAD 请求,因此请求第 0 个字节。Amazon S3该文件的大小包含在响应的 Content-Range
标头字段中。服务器需要 206 Partial Content
响应。任何其他响应状态代码都是错误。
可在 prvGetS3ObjectFileSize()
GitHub 网站中找到