本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
CoreHTTP 基本Amazon S3 上传演示
此演示托管在 Amazon-FreeRTOS 存储库中,该存储库已过时。建议您创建新项目时从这里开始。如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的 FreeRTOS 项目,请参阅亚马逊 FreeRTOS Github 存储库迁移指南。
介绍
该示例演示如何将 PUT 请求发送到Amazon Simple Storage Service (Amazon S3) HTTP 服务器发送PUT 请求,以及如何上传一个小文件。它还会在上传后执行 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 服务器并授权访问要下载的对象。Amazon S3 HTTP 服务器的 TLS 连接仅使用服务器身份验证。在应用程序级别,使用预签名 URL 查询中的参数对对象的访问进行身份验证。按照下述步骤操作,将您的连接配置为Amazon。
-
设置Amazon账户:
-
如果您尚不了解,请创建一个Amazon帐户
。 -
使用Amazon Identity and Access Management (IAM) 设置账户和权限。您可以使用 IAM 管理账户中每个用户的权限。默认情况下,只有在根所有者授予用户权限后,用户才有权限。
-
要向您的Amazon账户添加用户,请参阅 IAM 用户指南。
-
授予您的Amazon账户访问 FreeRTOSAmazon IoT 的权限,并添加以下政策:
-
亚马逊 S3FullAccess
-
-
-
-
按照如何创建 S3 存储桶?中的步骤在 Amazon S3 中创建存储桶 在 Amazon Simple Storage 服务用户指南中。
-
使用
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 服务器
该 connectToServerWithBackoffRetriesconnectToServerWithBackoffRetries
函数将返回失败状态。
该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