本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
CoreHttp 基本 Amazon S3 上传演示
介绍
此示例演示如何向 Amazon Simple Storage Service (Amazon S3) HTTP 服务器发送 PUT 请求并上传一个小文件。此外,它还执行 GET 请求来验证上传后的文件的大小。此示例使用网络传输接口
要设置和运行 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 管理账户中每个用户的权限。默认情况下,在根所有者授予之前,用户才具有权限。
-
将 IAM 用户添加到您的Amazon账户,请参阅IAM 用户指南.
-
向你的授予权限Amazon账户访问 FreeRTOS 和Amazon 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
文件。有关使用说明,请参阅
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
如果在配置的尝试次数之后无法建立与服务器的 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_Send
API 函数。一个200 OK
应该来自 Amazon S3 HTTP 服务器的响应状态代码。任何其他状态码都是错误的。
用于的源代码prvUploadS3ObjectFile()
可以在以下网站找到GitHub
验证上传
这些区域有:prvVerifyS3ObjectFileSize
函数调用prvGetS3ObjectFileSize
以检索 S3 存储桶中对象的大小。Amazon S3 HTTP 服务器目前不支持使用预签名 URL 的 HEAD 请求,因此请求第 0 个字节。文件的大小包含在响应的Content-Range
标头字段。一个206 Partial Content
预计来自服务器的响应。任何其他响应状态代码都是错误的。
用于的源代码prvGetS3ObjectFileSize()
可以在以下网站找到GitHub