本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
HTML 表單 (AWS 簽章版本 2)
當您與 Amazon S3 通訊時,您通常會使用 REST 或 SOAP API 來執行放置、取得、刪除及其他作業。使用 POST 時,使用者經由瀏覽器直接將資料上傳至 Amazon S3,因此無法處理 SOAP API 或建立 REST PUT 請求。
注意
Amazon S3 的 SOAP API 不適用於新客戶,並且將於 2025 年 8 月 31 日接近生命週期結束 (EOL)。我們建議您使用 REST API 或 AWS SDKs。
若要允許使用者使用瀏覽器將內容上傳至 Amazon S3,您可以使用 HTML 表單。HTML 表單是由一個表單宣告與多個表單欄位所組成。表單宣告包含要求的高階資訊。表單欄位包含要求的詳細資訊,以及用來對要求進行身分驗證及確保其符合所指定條件的政策。
注意
表單資料與邊界 (檔案內容除外) 不得超過 20 KB。
本節說明如何使用 HTML 表單。
HTML 表單編碼
表單與政策必須經過 UTF-8 編碼。您可以在 HTML 標題中指定 UTF-8 編碼,或將它指定作為要求標頭來套用至表單。
注意
HTML 表單宣告不接受查詢字串身分驗證參數。
以下為 HTML 標題中的 UTF-8 編碼範例:
<html> <head> ... <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> ... </head> <body>
以下為要求標頭中的 UTF-8 編碼範例:
Content-Type: text/html; charset=UTF-8
HTML 表單宣告
表單宣告有三個元件:動作、方法與封閉類型。若有任何值未正確設定,要求會失敗。
動作指定處理要求的 URL,必須將它設定為儲存貯體的 URL。例如,如果儲存貯體的名稱是 awsexamplebucket1,而區域是美國西部 (加利佛尼亞北部),則 URL 為 https://awsexamplebucket1.s3.us-west-1.amazonaws.com/。
注意
金鑰名稱是在表單欄位中指定。
方法必須是 POST。
封閉類型 (enctype) 必須加以指定,而且針對檔案上傳與文字區域上傳都必須設定為 multipart/form-data。如需詳細資訊,請參閱 RFC 1867
範例
下列範例是儲存貯體 "awsexamplebucket1" 的表單宣告。
<form action="https://awsexamplebucket1.s3.us-west-1.amazonaws.com/" method="post" enctype="multipart/form-data">
HTML 表單欄位
下表說明可在 HTML 表單中使用的欄位。
注意
系統會自動以使用者提供的檔案名稱來取代變數 ${filename},所有表單欄位都可識別此變數。如果瀏覽器或用戶端提供檔案的完整或部分路徑,則只會使用最後一個正斜線 (/) 或反斜線 (\) 後面的文字。例如,"C:\Program Files\directory1\file.txt" 會解譯為 "file.txt"。若未提供檔案或檔案名稱,則會以空字串取代變數。
| 欄位名稱 | 描述 | 必要 |
|---|---|---|
AWSAccessKeyId |
儲存貯體擁有者的 AWS 存取金鑰 ID,其會針對滿足政策中一組限制的請求授予匿名使用者存取。如果要求包含政策文件,則需要此欄位。 |
有條件 |
acl |
Amazon S3 存取控制清單 (ACL)。如果指定了無效的存取控制清單,則會產生錯誤。 類型:字串 預設值:private 有效值: |
否 |
Cache-Control, Content-Type, Content-Disposition,
Content-Encoding, Expires |
REST 特定標頭。如需詳細資訊,請參閱 PUT 物件。 |
否 |
key |
上傳的金鑰名稱。 若要使用使用者提供的檔名,請使用 ${filename} 變數。例如,如果使用者 Betty 上傳檔案 lolcatz.jpg 且您指定 /user/betty/${filename},則檔案會另存為 /user/betty/lolcatz.jpg。 如需詳細資訊,請參閱使用物件中繼資料。 |
是 |
policy |
說明要求中所允許之內容的安全政策。未使用安全政策的要求會視為匿名,只有在可公開寫入的儲存貯體上才會成功。 |
否 |
success_action_redirect, redirect |
用戶端成功上傳時被重新導向的目標 URL。Amazon S3 會將 bucket、key 和 etag 值當作查詢字串參數附加至 URL。 若未指定 success_action_redirect,Amazon S3 會傳回 success_action_status 欄位中所指定的空白文件類型。 如果 Amazon S3 無法解譯 URL,則會忽略 欄位。 如果上傳失敗,Amazon S3 會顯示錯誤,而不會將使用者重新導向至 URL。 如需詳細資訊,請參閱重新導向。 注意redirect 欄位名稱已被取代,未來將會移除對 redirect 欄位名稱的支援。 |
否 |
success_action_status |
成功上傳時,傳回給用戶端的狀態碼 (若未指定 success_action_redirect)。 有效值為 200、201 或 204 (預設值)。 如果值設定為 200 或 204,Amazon S3 會傳回狀態碼為 200 或 204 的空白文件。 如果值設定為 201,Amazon S3 會傳回狀態碼為 201 的 XML 文件。如需 XML 文件內容的相關資訊,請參閱 POST 物件。 如果值未設定或設定為無效的值,Amazon S3 會傳回狀態碼為 204 的空白文件。 注意Adobe Flash Player 的某些版本無法正確處理具有空白主體的 HTTP 回應。若要支援經由 Adobe Flash 上傳,建議將 |
否 |
signature |
HMAC 簽章是使用對應至提供之 AWSAccessKeyId 的私密存取金鑰所建構。如果要求包含政策文件,則需要此欄位。 如需詳細資訊,請參閱 Amazon S3 的 Identity and Access Management。 |
有條件 |
x-amz-security-token |
工作階段登入資料所使用的安全字符 如果請求使用 Amazon DevPay,則需要兩個 如果要求使用工作階段登入資料,則需要一個 |
否 |
| 前面加上 x-amz-meta- 的其他欄位名稱 |
使用者指定的中繼資料。 Amazon S3 不會驗證或使用此資料。 如需詳細資訊,請參閱 PUT 物件。 |
否 |
| file |
檔案或文字內容。 檔案或內容必須是表單中的最後一個欄位。其下方的任何欄位都會被忽略。 您無法一次上傳多個檔案。 |
是 |
政策建構
政策是 UTF-8 與 Base64 編碼的 JSON 文件,其指定要求必須符合的條件,並用來對內容進行身分驗證。根據您設計政策文件的方式,您可以針對每次上傳、每位使用者、所有上傳,或根據符合您需求的其他設計來使用這些文件。
注意
雖然您不一定要使用政策文件,但強烈建議在將儲存貯體設為可公開寫入時使用它。
以下為政策文件的範例:
{ "expiration": "2007-12-01T12:00:00.000Z", "conditions": [ {"acl": "public-read" }, {"bucket": "awsexamplebucket1" }, ["starts-with", "$key", "user/eric/"], ] }
政策文件包含過期與條件。
Expiration
過期元素是以 ISO 8601 UTC 日期格式來指定政策的過期日期。例如,"2007-12-01T12:00:00.000Z" 指定政策在過了 2007-12-01 午夜 UTC 後無效。政策中需要有過期資訊。
條件
政策文件中的條件會驗證上傳的物件內容。您在表單中指定的每個表單欄位 (AWSAccessKeyId、簽章、檔案、政策與具有 x-ignore- 字首的欄位名稱除外) 必須包含在條件清單中。
注意
如果您有多個同名的欄位,則必須以逗號分隔其值。例如,如果您有名為 "x-amz-meta-tag" 的兩個欄位,且第一個欄位的值為 "Ninja",第二個欄位的值為 "Stallman",您會將政策文件設定為 Ninja,Stallman。
系統會展開表單中的所有變數,再驗證政策。因此,必須對展開的欄位執行所有條件比對。例如,如果將金鑰欄位設定為 user/betty/${filename},您的政策可能是 [
"starts-with", "$key", "user/betty/" ]。請勿輸入 [
"starts-with", "$key", "user/betty/${filename}" ]。如需詳細資訊,請參閱「條件比對」。
下表說明政策文件條件。
| 元素名稱 | 描述 |
|---|---|
| acl |
指定 ACL 必須符合的條件。 支援完全符合與 |
| content-length-range |
指定上傳內容允許的大小上下限。 支援範圍比對。 |
| Cache-Control、Content-Type、Content-Disposition、Content-Encoding、Expires |
REST 特定標頭。 支援完全符合與 |
| 金鑰 |
上傳的金鑰名稱。 支援完全符合與 |
| success_action_redirect、redirect |
用戶端成功上傳時被重新導向的目標 URL。 支援完全符合與 |
| success_action_status |
成功上傳時,傳回給用戶端的狀態碼 (若未指定 success_action_redirect)。 支援完全符合。 |
| x-amz-security-token |
Amazon DevPay 安全字符。 每個使用 Amazon DevPay 的請求都需要兩個 |
| 前面加上 x-amz-meta- 的其他欄位名稱 |
使用者指定的中繼資料。 支援完全符合與 |
注意
如果您的工具組新增其他欄位 (例如 Flash 新增檔案名稱),則必須將它新增至政策文件。如果您可以控制此功能,請在欄位前面加上 x-ignore-,讓 Amazon S3 忽略此功能,這不會影響此功能的未來版本。
條件比對
下表說明條件比對類型。雖然您必須針對表單中所指定的每個表單欄位指定一個條件,但您可以藉由針對表單欄位指定多個條件,來建立更複雜的符合條件。
| Condition | 描述 |
|---|---|
|
完全符合 |
完全符合會確認欄位符合特定值。下列範例表示 ACL 必須設定為 public-read:
您也可以使用下列範例來表示 ACL 必須設定為 public-read:
|
|
開頭為 |
如果值必須以特定值開頭,請使用 starts-with。下列範例表示金鑰必須以 user/betty 開頭:
|
|
符合任何內容 |
若要設定政策以允許欄位中的任何內容,請使用 starts-with 並提供空白值。下列範例允許任何 success_action_redirect:
|
|
指定範圍 |
針對接受範圍的欄位,請以逗號分隔範圍的上下限。下列範例允許 1 到 10 MB 的檔案大小:
|
字元逸出
下表說明政策文件中必須逸出的字元。
| 逸出序列 | 描述 |
|---|---|
|
\\ |
反斜線 |
|
\$ |
貨幣符號 |
|
\b |
退格鍵 |
|
\f |
Form Feed |
|
\n |
新行 |
|
\r |
歸位字元 |
|
\t |
水平標籤 |
|
\v |
垂直標籤 |
|
\u |
所有 Unicode 字元 |
建構簽章
| 步驟 | 描述 |
|---|---|
| 1 |
使用 UTF-8 進行政策的編碼。 |
| 2 |
使用 Base64 進行這些 UTF-8 位元組的編碼。 |
| 3 |
使用 HMAC SHA-1 透過私密存取金鑰簽署政策。 |
| 4 |
使用 Base64 進行 SHA-1 簽章的編碼。 |
如需身分驗證的一般資訊,請參閱 Amazon S3 的 Identity and Access Management。
重新導向
本節說明如何處理重新導向。
一般重新導向
完成 POST 要求後,使用者會被重新導向至您在 success_action_redirect 欄位中指定的位置。如果 Amazon S3 無法解譯 URL,則會忽略 success_action_redirect 欄位。
若未指定 success_action_redirect,Amazon S3 會傳回 success_action_status 欄位中所指定的空白文件類型。
如果 POST 請求失敗,Amazon S3 會顯示錯誤,而不會提供重新導向。
上傳前重新導向
如果您的儲存貯體是使用 <CreateBucketConfiguration> 所建立,您的最終使用者可能需要重新導向。如果發生此情況,某些瀏覽器可能無法正確處理重新導向。這是相當少見的情況,最可能在建立儲存貯體之後立即發生。