

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

# 範例：使用 HTTP POST 以瀏覽器為基礎的上傳 （使用 AWS Signature 第 4 版）
<a name="sigv4-post-example"></a>

本節顯示使用 HTTP POST 請求將內容直接上傳至 Amazon S3 的範例。

如需 Signature 第 4 版的詳細資訊，請參閱 [Signature 第 4 版簽署程序](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)。

## 使用 HTTP POST 將檔案上傳至 Amazon S3
<a name="sigv4-post-example-file-upload"></a>

此範例提供範例 POST 政策，以及可用來上傳檔案的表單。主題使用範例政策和虛構登入資料，向您顯示工作流程和產生的簽章和政策雜湊。您可以使用此資料做為測試套件來驗證您的簽章計算程式碼。

此範例使用下列範例登入簽章計算。您可以使用這些登入資料來驗證簽章計算程式碼。不過，在傳送請求到 時，您必須以自己的登入資料取代這些登入資料 AWS。


| 參數 | Value | 
| --- | --- | 
| AWSAccessKeyId | AKIAIOSFODNN7EXAMPLE | 
| AWSSecretAccessKey | wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY | 

### 範例政策和表單
<a name="sigv4-post-example-file-upload-policy"></a>

下列 POST 政策支援在特定條件下上傳至 Amazon S3。

```
 1. { "expiration": "2015-12-30T12:00:00.000Z",
 2.   "conditions": [
 3.     {"bucket": "sigv4examplebucket"},
 4.     ["starts-with", "$key", "user/user1/"],
 5.     {"acl": "public-read"},
 6.     {"success_action_redirect": "http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html"},
 7.     ["starts-with", "$Content-Type", "image/"],
 8.     {"x-amz-meta-uuid": "14365123651274"},
 9.     {"x-amz-server-side-encryption": "AES256"},
10.     ["starts-with", "$x-amz-meta-tag", ""],
11. 
12.     {"x-amz-credential": "AKIAIOSFODNN7EXAMPLE/20151229/us-east-1/s3/aws4_request"},
13.     {"x-amz-algorithm": "AWS4-HMAC-SHA256"},
14.     {"x-amz-date": "20151229T000000Z" }
15.   ]
16. }
```

此 POST 政策會在請求上設定下列條件：
+ 上傳必須在 2015 年 12 月 30 日中午 UTC 之前進行。
+ 內容只能上傳至 `sigv4examplebucket`。儲存貯體必須位於您在登入資料範圍 (`x-amz-credential` 表單參數） 中指定的區域，因為您提供的簽章僅在此範圍內有效。
+ 您可以提供開頭為 的任何金鑰名稱`user/user1`。例如 `user/user1/MyPhoto.jpg`。
+ ACL 必須設定為 `public-read`。
+ 如果上傳成功，使用者的瀏覽器會重新導向至 `http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html`。
+ 物件必須是映像檔案。
+ `x-amz-meta-uuid` 標籤必須設定為 `14365123651274`。
+ `x-amz-meta-tag` 可以包含任何值。

以下是此 POST 政策的 Base64-encoded版本。您可以在簽章計算中使用此值做為 StringToSign。

```
1. eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTMwVDEyOjAwOjAwLjAwMFoiLA0KICAiY29uZGl0aW9ucyI6IFsNCiAgICB7ImJ1Y2tldCI6ICJzaWd2NGV4YW1wbGVidWNrZXQifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci91c2VyMS8iXSwNCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCJ9LA0KICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL3NpZ3Y0ZXhhbXBsZWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tL3N1Y2Nlc3NmdWxfdXBsb2FkLmh0bWwifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRDb250ZW50LVR5cGUiLCAiaW1hZ2UvIl0sDQogICAgeyJ4LWFtei1tZXRhLXV1aWQiOiAiMTQzNjUxMjM2NTEyNzQifSwNCiAgICB7IngtYW16LXNlcnZlci1zaWRlLWVuY3J5cHRpb24iOiAiQUVTMjU2In0sDQogICAgWyJzdGFydHMtd2l0aCIsICIkeC1hbXotbWV0YS10YWciLCAiIl0sDQoNCiAgICB7IngtYW16LWNyZWRlbnRpYWwiOiAiQUtJQUlPU0ZPRE5ON0VYQU1QTEUvMjAxNTEyMjkvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LA0KICAgIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwNCiAgICB7IngtYW16LWRhdGUiOiAiMjAxNTEyMjlUMDAwMDAwWiIgfQ0KICBdDQp9
```

當您複製/貼上上述政策時，它應該具有歸位符號，以及運算雜湊的新行，以符合此值 （即 ASCII 文字，具有 CRLF 行終端器）。

使用範例登入資料來建立簽章，簽章值如下所示 （在簽章計算中，日期與政策 (20151229 `x-amz-date`中的 相同）：

```
8afdbf4008c03f22c2cd3cdb72e4afbb1f6a588f3255ac628749a66d7f09699e
```

下列範例表單會指定上述 POST 政策，並支援對 提出 POST 請求`sigv4examplebucket`。在文字編輯器中複製/貼上內容，並將其儲存為 exampleform.html。然後，您可以使用 exampleform.html 將映像檔案上傳至特定儲存貯體。如果您提供的簽章符合 Amazon S3 計算的簽章，您的請求將會成功。

**注意**  
您必須使用有效值更新儲存貯體名稱、日期、登入資料、政策和簽章，才能成功上傳至 S3。

```
 1. <html>
 2.   <head>
 3.     
 4.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 5.     
 6.   </head>
 7.   <body>
 8. 
 9.   <form action="http://sigv4examplebucket.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
10.     Key to upload: 
11.     <input type="input"  name="key" value="user/user1/${filename}" /><br />
12.     <input type="hidden" name="acl" value="public-read" />
13.     <input type="hidden" name="success_action_redirect" value="http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html" />
14.     Content-Type: 
15.     <input type="input"  name="Content-Type" value="image/jpeg" /><br />
16.     <input type="hidden" name="x-amz-meta-uuid" value="14365123651274" /> 
17.     <input type="hidden" name="x-amz-server-side-encryption" value="AES256" /> 
18.     <input type="text"   name="X-Amz-Credential" value="AKIAIOSFODNN7EXAMPLE/20151229/us-east-1/s3/aws4_request" />
19.     <input type="text"   name="X-Amz-Algorithm" value="AWS4-HMAC-SHA256" />
20.     <input type="text"   name="X-Amz-Date" value="20151229T000000Z" />
21. 
22.     Tags for File: 
23.     <input type="input"  name="x-amz-meta-tag" value="" /><br />
24.     <input type="hidden" name="Policy" value='{{<Base64-encoded policy string>}}' />
25.     <input type="hidden" name="X-Amz-Signature" value="{{<signature-value>}}" />
26.     File: 
27.     <input type="file"   name="file" /> <br />
28.     <!-- The elements after this will be ignored -->
29.     <input type="submit" name="submit" value="Upload to Amazon S3" />
30.   </form>
31.   
32. </html>
```

後置參數不區分大小寫。例如，您可以指定 `x-amz-signature` 或 `X-Amz-Signature`。