View a markdown version of this page

建立 HTML 表單 (使用 AWS Signature 第 4 版) - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立 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

有效值: private | public-read | public-read-write | aws-exec-read | authenticated-read | bucket-owner-read | bucket-owner-full-control

Cache-Control

Content-Type

Content-Disposition

Content-Encoding

Expires

REST 特定標頭。如需詳細資訊,請參閱 PutObject

key

上傳物件的金鑰名稱。

若要使用使用者提供的檔案名稱,請使用 ${filename} 變數。例如,如果您上傳檔案,photo1.jpg並將 指定/user/user1/${filename}為金鑰名稱,則檔案會儲存為 /user/user1/photo1.jpg

如需詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的物件金鑰和中繼資料

policy

描述請求中允許內容的 base64 編碼安全政策。對於已驗證的請求,需要政策。

沒有安全政策的請求會被視為匿名,而且只會在可公開寫入的儲存貯體上成功。

已驗證請求的必要項目

success_action_redirect

用戶端成功上傳時被重新導向的目標 URL。

如果success_action_redirect未指定 ,或 Amazon S3 無法解譯 URL,Amazon S3 會傳回 success_action_status 欄位中指定的空白文件類型。

如果上傳失敗,Amazon S3 會傳回錯誤,而不會將使用者重新導向至另一個 URL。

success_action_status

如果success_action_redirect未指定 ,則在成功上傳時傳回用戶端的狀態碼。

有效值為 200201204(預設值)。

如果值設定為 200 或 204,Amazon S3 會傳回具有指定狀態碼的空白文件。

如果值設定為 201,Amazon S3 會傳回狀態碼為 201 的 XML 文件。如需 XML 文件內容的詳細資訊,請參閱 POST 物件

如果值未設定或無效,Amazon S3 會傳回狀態碼為 204 的空白文件。

注意

Adobe Flash Player 的某些版本無法正確處理具有空白主體的 HTTP 回應。若要支援經由 Adobe Flash 上傳,建議將 success_action_status 設定為 201。

x-amz-algorithm

用來驗證請求的簽署演算法。對於 AWS Signature 第 4 版,值為 AWS4-HMAC-SHA256

如果要求包含政策文件,則需要此欄位。

已驗證請求的必要項目

x-amz-credential

除了您的存取金鑰 ID 之外,此欄位還提供範圍資訊,識別簽章有效的區域和服務。這應該與您用於計算簽署金鑰以進行簽章計算的範圍相同。

這是以下格式的字串:

<your-access-key-id>/<date>/<aws-region>/<aws-service>/aws4_request

例如:

AKIAIOSFODNN7EXAMPLE/20130728/us-east-1/s3/aws4_request

對於 Amazon S3,aws-service 字串為 s3。如需 Amazon S3 aws-region字串的清單,請參閱《》中的區域和端點AWS 一般參考。如果請求中包含政策文件,則此為必要項目。

已驗證請求的必要項目

x-amz-date

這是 ISO8601 格式的日期值。例如 20130728T000000Z

這是您在建立簽署金鑰時所使用的相同日期 (例如 20130728)。這也必須與您簽署的政策 (x-amz-date) 中提供的值相同。

如果請求中包含政策文件,則此為必要項目。

已驗證請求的必要項目

x-amz-security-token

Amazon DevPay 和工作階段登入資料使用的安全字符

如果請求使用 Amazon DevPay,則需要兩個x-amz-security-token表單欄位:一個用於產品字符,另一個用於使用者字符。如需詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的使用 DevPay

如果請求使用工作階段登入資料,則需要一個x-amz-security-token表單。如需詳細資訊,請參閱《 IAM 使用者指南》中的請求臨時安全憑證

x-amz-signature

(AWS 簽章版本 4) 安全政策的 HMAC-SHA256 雜湊。

如果要求包含政策文件,則需要此欄位。

已驗證請求的必要項目

x-amz-meta-*

以此字首開頭的欄位名稱是使用者定義的中繼資料。每個項目都會儲存並傳回為一組鍵/值對。Amazon S3 不會驗證或解譯使用者定義的中繼資料。如需詳細資訊,請參閱 PutObject

x-amz-*

如需其他x-amz-*標頭,請參閱 POST 物件 (POST 物件

file

檔案或文字內容。

檔案或內容必須是表單中的最後一個欄位。

您無法一次上傳多個檔案。

驗證請求需要條件式項目,匿名請求則為選用項目。

現在您已了解如何建立表單,接下來您可以建立您可以簽署的安全政策。如需詳細資訊,請參閱POST 政策