

# Exemplo: upload baseado no navegador usando HTTP POST (usando o AWS Signature Version 4)
<a name="sigv4-post-example"></a>

Esta seção mostra um exemplo do uso de uma solicitação HTTP POST para fazer upload de conteúdo diretamente no Amazon S3.

Para obter mais informações sobre o Signature Version 4, consulte [Processo de assinatura do Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html).

## Upload de um arquivo no Amazon S3 usando HTTP POST
<a name="sigv4-post-example-file-upload"></a>

Este exemplo fornece uma política de POST de exemplo e um formulário que você pode usar para fazer upload de um arquivo. Este tópico usa a política de exemplo e as credenciais fictícias para mostrar o fluxo de trabalho e a assinatura e o hash da política resultantes. Você pode usar esses dados como conjunto de testes para verificar seu código de cálculo de assinatura.

O exemplo usa as credenciais de exemplo a seguir nos cálculos da assinatura. Você pode usar essas credenciais para verificar o código de cálculo da assinatura. No entanto, você deve substituí-las por suas próprias credenciais ao enviar solicitações para a AWS.


| Parâmetro | Valor | 
| --- | --- | 
| AWSAccessKeyId | AKIAIOSFODNN7EXAMPLE | 
| AWSSecretAccessKey | wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY | 

### Política e formulário de exemplo
<a name="sigv4-post-example-file-upload-policy"></a>

A política de POST a seguir é compatível com uploads no Amazon S3 com condições específicas.

```
 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. }
```

Ela define as seguintes condições na solicitação:
+ O upload deve ocorrer antes do meio-dia UTC em 30 de dezembro de 2015.
+ O conteúdo só pode ser enviado para `sigv4examplebucket`. O bucket deve estar na região que você especificou no escopo da credencial (parâmetro do formulário `x-amz-credential`), porque a assinatura fornecida é válida somente dentro desse escopo.
+ Você pode fornecer qualquer nome de chave que comece com `user/user1`. Por exemplo, `user/user1/MyPhoto.jpg`.
+ A ACL deve ser definida como `public-read`.
+ Se o upload for bem-sucedido, o navegador do usuário será redirecionado para `http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html`.
+ O objeto deve ser um arquivo de imagem.
+ A tag `x-amz-meta-uuid` deve ser definida como `14365123651274`. 
+ A `x-amz-meta-tag` pode conter qualquer valor.

Veja a seguir uma versão codificada em Base64 dessa política de POST. Você usa esse valor como a StringToSign no cálculo da assinatura.

```
1. eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTMwVDEyOjAwOjAwLjAwMFoiLA0KICAiY29uZGl0aW9ucyI6IFsNCiAgICB7ImJ1Y2tldCI6ICJzaWd2NGV4YW1wbGVidWNrZXQifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci91c2VyMS8iXSwNCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCJ9LA0KICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL3NpZ3Y0ZXhhbXBsZWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tL3N1Y2Nlc3NmdWxfdXBsb2FkLmh0bWwifSwNCiAgICBbInN0YXJ0cy13aXRoIiwgIiRDb250ZW50LVR5cGUiLCAiaW1hZ2UvIl0sDQogICAgeyJ4LWFtei1tZXRhLXV1aWQiOiAiMTQzNjUxMjM2NTEyNzQifSwNCiAgICB7IngtYW16LXNlcnZlci1zaWRlLWVuY3J5cHRpb24iOiAiQUVTMjU2In0sDQogICAgWyJzdGFydHMtd2l0aCIsICIkeC1hbXotbWV0YS10YWciLCAiIl0sDQoNCiAgICB7IngtYW16LWNyZWRlbnRpYWwiOiAiQUtJQUlPU0ZPRE5ON0VYQU1QTEUvMjAxNTEyMjkvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LA0KICAgIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwNCiAgICB7IngtYW16LWRhdGUiOiAiMjAxNTEyMjlUMDAwMDAwWiIgfQ0KICBdDQp9
```

Quando você copia/cola a política anterior, ela deve ter retornos de carro e novas linhas para que o hash computado corresponda a esse valor (ou seja, texto ASCII, com terminadores de linha CRLF).

Usando credenciais de exemplo para criar uma assinatura, o valor da assinatura é o seguinte (no cálculo da assinatura, a data é igual a `x-amz-date` na política (20151229):

```
8afdbf4008c03f22c2cd3cdb72e4afbb1f6a588f3255ac628749a66d7f09699e
```

O formulário de exemplo a seguir especifica a política de POST anterior e é compatível com uma solicitação POST para o `sigv4examplebucket`. Copie/cole o conteúdo em um editor de texto e salve-o como exampleform.html. Em seguida, você pode fazer upload de arquivos de imagem para o bucket específico usando o exampleform.html. Sua solicitação será bem-sucedida se a assinatura fornecida corresponder à assinatura calculada pelo Amazon S3.

**nota**  
Você deve atualizar o nome do bucket, as datas, a credencial, a política e a assinatura com valores válidos para que o upload seja realizado no 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>
```

Os parâmetros de postagem não diferenciam maiúsculas de minúsculas. Por exemplo, é possível especificar `x-amz-signature` ou `X-Amz-Signature`.