本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
coreHTTP 基本 S3 下載示範
重要
這是 FreeRTOS 使用者指南的封存版本,可與 FreeRTOS 版本 202210.00 搭配使用。如需本文件的最新版本,請參閱 FreeRTOS 使用者指南。
簡介
此示範示範如何使用範圍請求HTTPClient_AddRangeHeader
建立 HTTP 請求時,coreHTTP API 原生支援範圍請求。對於微型控制器環境,強烈建議提出範圍請求。透過下載不同範圍的大型檔案,而不是單一請求,可以在不封鎖網路通訊端的情況下處理檔案的每個區段。範圍請求可降低捨棄封包的風險,這需要在 TCP 連線上重新傳輸,因此可改善裝置的耗電量。
此範例使用使用 mbedTLS 的網路傳輸界面
注意
若要設定和執行 FreeRTOS 示範,請遵循中的步驟FreeRTOS 入門。
單一執行緒與多執行緒
有兩種 coreHTTP 使用模型:單一執行緒和多執行緒 (多任務)。雖然本節中的示範會在執行緒中執行 HTTP 程式庫,但實際上示範如何在單一執行緒環境中使用 coreHTTP (示範中只有一個任務使用 HTTP API)。雖然單一執行緒應用程式必須重複呼叫 HTTP 程式庫,但多執行緒應用程式可以改為在代理程式 (或協助程式) 任務的背景中傳送 HTTP 請求。
原始碼組織
示範專案名為 http_demo_s3_download.c
,可在
目錄和 GitHubfreertos
/demos/coreHTTP/
設定 Amazon S3 HTTP 伺服器連線
此示範使用預先簽章的 URL 來連線至 Amazon S3 HTTP 伺服器,並授權物件的存取權進行下載。Amazon S3 HTTP 伺服器的 TLS 連線只會使用伺服器身分驗證。在應用程式層級,會使用預先簽章 URL 查詢中的參數來驗證物件的存取權。請依照下列步驟設定您的連線 AWS。
註冊 AWS 帳戶
如果您沒有 AWS 帳戶,請完成下列步驟來建立一個。
註冊 AWS 帳戶
請遵循線上指示進行。
註冊程序的一部分包括接聽電話或文字訊息,並在電話鍵盤上輸入驗證碼。
當您註冊 時 AWS 帳戶,AWS 帳戶根使用者會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務,請將管理存取權指派給使用者,並且僅使用根使用者來執行需要根使用者存取權的任務。
AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時登錄 https://aws.amazon.com/
建立具有管理存取權的使用者
註冊 後 AWS 帳戶,請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center和建立管理使用者,以免將根使用者用於日常任務。
保護您的 AWS 帳戶根使用者
-
選擇根使用者並輸入 AWS 帳戶 您的電子郵件地址,以帳戶擁有者AWS Management Console
身分登入 。在下一頁中,輸入您的密碼。 如需使用根使用者登入的說明,請參閱 AWS 登入 使用者指南中的以根使用者身分登入。
-
若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。
如需說明,請參閱《IAM 使用者指南》中的為您的 AWS 帳戶 根使用者 (主控台) 啟用虛擬 MFA 裝置。
建立具有管理存取權的使用者
-
啟用 IAM Identity Center。
如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的啟用 AWS IAM Identity Center。
-
在 IAM Identity Center 中,將管理存取權授予使用者。
如需使用 IAM Identity Center 目錄 做為身分來源的教學課程,請參閱AWS IAM Identity Center 《 使用者指南》中的使用預設值設定使用者存取 IAM Identity Center 目錄。
以具有管理存取權的使用者身分登入
-
若要使用您的 IAM Identity Center 使用者簽署,請使用建立 IAM Identity Center 使用者時傳送至您電子郵件地址的簽署 URL。
如需使用 IAM Identity Center 使用者登入的說明,請參閱AWS 登入 《 使用者指南》中的登入 AWS 存取入口網站。
指派存取權給其他使用者
若要提供存取權,請新增權限至您的使用者、群組或角色:
-
中的使用者和群組 AWS IAM Identity Center:
建立權限合集。請按照 AWS IAM Identity Center 使用者指南 中的 建立權限合集 說明進行操作。
-
透過身分提供者在 IAM 中管理的使用者:
建立聯合身分的角色。遵循「IAM 使用者指南」的為第三方身分提供者 (聯合) 建立角色中的指示。
-
IAM 使用者:
-
建立您的使用者可擔任的角色。請按照「IAM 使用者指南」的為 IAM 使用者建立角色中的指示。
-
(不建議) 將政策直接附加至使用者,或將使用者新增至使用者群組。請遵循 IAM 使用者指南的新增許可到使用者 (主控台) 中的指示。
-
-
遵循《Amazon Simple Storage Service 主控台使用者指南》中的如何建立 S3 儲存貯體?中的步驟,在 S3 中建立儲存貯體。 S3
-
遵循如何將檔案和資料夾上傳至 S3 儲存貯體中的步驟,將檔案上傳至 S3?。 S3
-
使用位於 的指令碼產生預先簽章的 URL
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
。
功能
示範會先擷取檔案大小。然後,它會在迴圈中依序請求每個位元組範圍,範圍大小為 democonfigRANGE_REQUEST_LENGTH
。
您可以在 GitHub
連線至 Amazon S3 HTTP 伺服器
函數 connectToServerWithBackoffRetries()connectToServerWithBackoffRetries()
傳回失敗狀態。
函數prvConnectToServer()
示範如何使用伺服器身分驗證建立與 Amazon S3 HTTP 伺服器的連線。它使用在 FreeRTOS-Plus/Source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using_mbedtls.c
您可以在 GitHubprvConnectToServer()
找到 的原始碼。
建立範圍請求
API 函數HTTPClient_AddRangeHeader()
支援將位元組範圍序列化為 HTTP 請求標頭,以形成範圍請求。此示範會使用範圍請求來擷取檔案大小,並請求檔案的每個區段。
函數會prvGetS3ObjectFileSize()
擷取 S3 儲存貯體中檔案大小。Connection: keep-alive
標頭會新增至 Amazon S3 的第一個請求,以在傳送回應後保持連線開啟。S3 HTTP 伺服器目前不支援使用預先簽章 URL 的 HEAD 請求,因此請求第 0 個位元組。檔案的大小包含在回應的Content-Range
標頭欄位中。預期來自伺服器的206 Partial Content
回應;收到的任何其他回應狀態碼都是錯誤。
您可以在 GitHubprvGetS3ObjectFileSize()
找到 的原始碼。
擷取檔案大小後,此示範會為要下載檔案的每個位元組範圍建立新的範圍請求。它會HTTPClient_AddRangeHeader()
針對 檔案的每個區段使用 。
傳送範圍請求和接收回應
函數會在迴圈中prvDownloadS3ObjectFile()
傳送範圍請求,直到下載整個檔案為止。API 函數HTTPClient_Send()
會傳送請求並同步接收回應。當函數傳回時,回應會在 中收到xResponse
。然後,狀態碼會驗證為 ,206 Partial Content
而且到目前為止下載的位元組數會以Content-Length
標頭值遞增。
您可以在 GitHubprvDownloadS3ObjectFile()
找到 的原始碼。