本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立 HTML 表單 (使用 AWS Signature 第 4 版)
若要允許使用者使用瀏覽器 (HTTP POST 請求) 將內容上傳至 Amazon S3,您可以使用 HTML 表單。HTML 表單是由一個表單宣告與多個表單欄位所組成。表單宣告包含要求的高階資訊。表單欄位包含詳細的請求資訊。
本節說明如何建立 HTML 表單。如需使用 HTTP POST 的瀏覽器型上傳工作範例,以及請求身分驗證的相關簽章計算,請參閱 範例:使用 HTTP POST 以瀏覽器為基礎的上傳 (使用 AWS Signature 第 4 版)。
表單與政策必須經過 UTF-8 編碼。您可以在 content 屬性charset=UTF-8中指定 ,將 UTF-8 編碼套用至表單。以下是 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
注意
表單資料和邊界 (檔案內容除外) 不得超過 20KB。
HTML 表單宣告
HTML 表單宣告具有下列三個屬性:
-
action– 處理請求的 URL,必須設定為儲存貯體的 URL。例如,如果您的儲存貯體名稱為examplebucket,則 URL 為http://examplebucket.s3.amazonaws.com/。注意
金鑰名稱是在表單欄位中指定。
-
method– 方法必須為 POST。 -
enctype– 檔案上傳和文字區域上傳的附件類型 (enctype) 必須設定為分段/表單資料。如需 的詳細資訊enctype,請參閱 RFC 1867。
這是儲存貯體 的表單宣告examplebucket。
<form action="http://examplebucket.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
HTML 表單欄位
下表說明您可以在表單中使用的欄位清單。在其他欄位中,有一個簽章欄位,您可以用來驗證請求。有些欄位可讓您指定簽章計算演算法 (x-amz-algorithm)、用於產生簽署金鑰的登入資料範圍 (x-amz-credential),以及用於計算簽章的日期 (x-amz-date)。Amazon S3 會使用此資訊來重新建立簽章。如果簽章相符,Amazon S3 會處理請求。
注意
系統會自動以使用者提供的檔案名稱來取代變數 ${filename},所有表單欄位都可識別此變數。如果瀏覽器或用戶端提供檔案的完整或部分路徑,則只會使用最後一個斜線 (/) 或反斜線 (\) 後面的文字 (例如, C:\Program Files\directory1\file.txt 解譯為 file.txt)。若未提供檔案或檔案名稱,則會以空字串取代變數。
如果您未提供驗證請求所需的元素,例如 policy元素,則請求會假設為匿名,而且只有在您已設定儲存貯體進行公有讀取和寫入時,才會成功。
| 元素名稱 | 說明 | 必要 |
|---|---|---|
acl |
Amazon S3 存取控制清單 (ACL)。如果指定無效的 ACL,Amazon S3 會拒絕請求。如需 ACLs的詳細資訊,請參閱使用 Amazon S3 ACLs。 類型:字串 預設值:private 有效值: |
否 |
Cache-Control
|
REST 特定標頭。如需詳細資訊,請參閱 PutObject。 |
否 |
key |
上傳物件的金鑰名稱。 若要使用使用者提供的檔案名稱,請使用 ${filename} 變數。例如,如果您上傳檔案, 如需詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的物件金鑰和中繼資料。 |
是 |
policy |
描述請求中允許內容的 base64 編碼安全政策。對於已驗證的請求,需要政策。 沒有安全政策的請求會被視為匿名,而且只會在可公開寫入的儲存貯體上成功。 |
已驗證請求的必要項目 |
success_action_redirect |
用戶端成功上傳時被重新導向的目標 URL。 如果 如果上傳失敗,Amazon S3 會傳回錯誤,而不會將使用者重新導向至另一個 URL。 |
否 |
success_action_status |
如果 有效值為 如果值設定為 200 或 204,Amazon S3 會傳回具有指定狀態碼的空白文件。 如果值設定為 201,Amazon S3 會傳回狀態碼為 201 的 XML 文件。如需 XML 文件內容的詳細資訊,請參閱 POST 物件。 如果值未設定或無效,Amazon S3 會傳回狀態碼為 204 的空白文件。 注意Adobe Flash Player 的某些版本無法正確處理具有空白主體的 HTTP 回應。若要支援經由 Adobe Flash 上傳,建議將 |
否 |
x-amz-algorithm |
用來驗證請求的簽署演算法。對於 AWS Signature 第 4 版,值為 如果要求包含政策文件,則需要此欄位。 |
已驗證請求的必要項目 |
x-amz-credential |
除了您的存取金鑰 ID 之外,此欄位還提供範圍資訊,識別簽章有效的區域和服務。這應該與您用於計算簽署金鑰以進行簽章計算的範圍相同。 這是以下格式的字串:
例如:
對於 Amazon S3,aws-service 字串為 s3。如需 Amazon S3 aws-region字串的清單,請參閱《》中的區域和端點AWS 一般參考。如果請求中包含政策文件,則此為必要項目。 |
已驗證請求的必要項目 |
x-amz-date |
這是 ISO8601 格式的日期值。例如 這是您在建立簽署金鑰時所使用的相同日期 (例如 20130728)。這也必須與您簽署的政策 ( 如果請求中包含政策文件,則此為必要項目。 |
已驗證請求的必要項目 |
x-amz-security-token |
Amazon DevPay 和工作階段登入資料使用的安全字符 如果請求使用 Amazon DevPay,則需要兩個 如果請求使用工作階段登入資料,則需要一個 |
否 |
x-amz-signature |
(AWS 簽章版本 4) 安全政策的 HMAC-SHA256 雜湊。 如果要求包含政策文件,則需要此欄位。 |
已驗證請求的必要項目 |
x-amz-meta-* |
以此字首開頭的欄位名稱是使用者定義的中繼資料。每個項目都會儲存並傳回為一組鍵/值對。Amazon S3 不會驗證或解譯使用者定義的中繼資料。如需詳細資訊,請參閱 PutObject。 |
否 |
x-amz-* |
如需其他 |
否 |
file |
檔案或文字內容。 檔案或內容必須是表單中的最後一個欄位。 您無法一次上傳多個檔案。 |
是 |
驗證請求需要條件式項目,匿名請求則為選用項目。
現在您已了解如何建立表單,接下來您可以建立您可以簽署的安全政策。如需詳細資訊,請參閱POST 政策。