

# Formulários HTML (AWS Signature Version 2)
<a name="HTTPPOSTForms"></a>

**Topics**
+ [Codificação do formulário HTML](#HTTPPOSTFormEncoding)
+ [Declaração do formulário HTML](#HTTPPOSTFormDeclaration)
+ [Campos do formulário HTML](#HTTPPOSTFormFields)
+ [Criação de política](#HTTPPOSTConstructPolicy)
+ [Criar uma assinatura](#HTTPPOSTConstructingPolicySignature)
+ [Redirecionamento](#HTTPPOSTConstructingPolicyRedirection)

Ao se comunicar com o Amazon S3, você normalmente usa as APIs REST ou SOAP para executar as operações “put”, “get”, “delete”, entre outras. Com POST, os usuários fazem upload dos dados diretamente para o Amazon S3 por meios dos navegadores, que não são capazes de processar a API SOAP ou criar uma solicitação `PUT` de REST.

**nota**  
 As APIs SOAP para o Amazon S3 não estão disponíveis para novos clientes e chegam ao fim da vida útil (EOL) em 31 de agosto de 2025. Recomendamos usar a API REST ou os AWS SDKs. 

Para permitir que os usuários façam upload de conteúdo para o Amazon S3 usando os navegadores, use formulários HTML. Os formulários HTML são formados por uma declaração de formulário e campos de formulário. A declaração de formulário contém informações de alto nível sobre a solicitação. Os campos de formulário contêm informações detalhadas sobre a solicitação, bem como a política usada para autenticá-la e garantir que ela satisfaça as condições especificadas.

**nota**  
Os dados e os limites do formulário (excluindo o conteúdo do arquivo) não podem exceder 20 KB.

Esta seção explica como usar formulários HTML.

## Codificação do formulário HTML
<a name="HTTPPOSTFormEncoding"></a>

O formulário e a política devem ser codificados em UTF-8. Aplique a codificação UTF-8 no formulário especificando isso no cabeçalho HTML ou como um cabeçalho de solicitação.

**nota**  
 A declaração de formulário HTML não aceita parâmetros de autenticação por query string. 

A seguir um exemplo de codificação UTF-8 no cabeçalho HTML:

```
1. <html>
2.   <head>
3.     ...
4.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
5.     ...
6.   </head>
7.   <body>
```

A seguir um exemplo de codificação UTF-8 em um cabeçalho de solicitação:

```
1. Content-Type: text/html; charset=UTF-8
```

## Declaração do formulário HTML
<a name="HTTPPOSTFormDeclaration"></a>

A declaração de formulário tem três componentes: a ação, o método e o tipo de compartimento. Se qualquer um desses valores for definido de maneira incorreta, a solicitação falhará.

A ação especifica o URL que processa a solicitação, que deve ser definido como o URL do bucket. Por exemplo, se o nome do seu bucket for `awsexamplebucket1` e a região for Oeste dos EUA (Norte da Califórnia), o URL será `https://awsexamplebucket1.s3.us-west-1.amazonaws.com/`.

**nota**  
O nome chave é especificado em um campo do formulário.

O método deve ser POST.

O tipo de compartimento (enctype) deve ser especificado e definido como multipart/form-data para uploads de arquivos e de áreas de texto. Para obter mais informações, acesse [RFC 1867](http://www.ietf.org/rfc/rfc1867.txt).

**Example**  
O exemplo a seguir é uma declaração de formulário para o bucket "awsexamplebucket1".  

```
1. <form action="https://awsexamplebucket1.s3.us-west-1.amazonaws.com/" method="post"
2. 
3. enctype="multipart/form-data">
```

## Campos do formulário HTML
<a name="HTTPPOSTFormFields"></a>

A tabela a seguir descreve os campos que podem ser usados em um formulário HTML.

**nota**  
A variável `${filename}` é substituída automaticamente pelo nome do arquivo fornecido pelo usuário e é reconhecida por todos os campos do formulário. Se o navegador ou o cliente fornece um caminho completo ou parcial para o arquivo, apenas o texto que vem depois da última barra (/) ou barra invertida (\\) será usado. Por exemplo, "C:\\Program Files\\directory1\\file.txt" será interpretado como "file.txt". Se nenhum arquivo ou nome de arquivo for fornecido, a variável será substituída por uma string vazia.


| Nome do campo | Descrição | Obrigatório | 
| --- | --- | --- | 
| AWSAccessKeyId | O ID da chave de acesso da AWS do proprietário do bucket que concede acesso a um usuário anônimo para uma solicitação que satisfaz o conjunto de restrições na política. Este campo é necessário se a solicitação inclui um documento de política. | Condicional | 
| acl | Uma lista de controle de acesso (ACL) do Amazon S3. Se uma lista de controle de acesso inválida for especificada, um erro será gerado.<br />Tipo: string<br />Padrão: privado<br /> Valores válidos: `private \| public-read \| public-read-write \| aws-exec-read \| authenticated-read \| bucket-owner-read \| bucket-owner-full-control `  | Não | 
| Cache-Control, Content-Type, Content-Disposition, Content-Encoding, Expires | Cabeçalhos específicos para REST. Para obter mais informações, consulte [Objeto PUT](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html). | Não | 
| key | O nome da chave carregada.<br />Para usar o nome de arquivo fornecido pelo usuário, use a variável ${filename}. Por exemplo, se o usuário Betty carrega o arquivo lolcatz.jpg e você especifica /user/betty/${filename}, o arquivo é armazenado como /user/betty/lolcatz.jpg.<br />Para obter mais informações, consulte [Trabalhar com metadados de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html). | Sim | 
| policy | Política de segurança que descreve o que é permitido na solicitação. As solicitações sem uma política de segurança são consideradas anônimas e terão sucesso apenas em buckets com gravação pública.  | Não | 
| success\_action\_redirect, redirect | O URL para o qual o cliente é redirecionado após um upload bem-sucedido. O Amazon S3 anexa os valores de bucket, chave e etag como parâmetros de query string ao URL.<br />Se success\_action\_redirect não for especificado, o Amazon S3 retornará o tipo de documento vazio especificado no campo success\_action\_status.<br />Se o Amazon S3 não for capaz de interpretar o URL, o campo será ignorado.<br />Se houver falha no upload, o Amazon S3 exibirá um erro e não redirecionará o usuário para um URL.<br />Para obter mais informações, consulte [Redirecionamento](#HTTPPOSTConstructingPolicyRedirection).   O nome do campo de redirecionamento está obsoleto e o suporte para ele será removido no futuro.   | Não | 
| success\_action\_status | O código de status retornado ao cliente após o upload bem-sucedido se success\_action\_redirect não for especificado.<br />Os valores válidos são 200, 201 ou 204 (padrão).<br />Se o valor estiver definido como 200 ou 204, o Amazon S3 retornará um documento vazio com um código de status 200 ou 204.<br />Se o valor estiver definido como 201, o Amazon S3 retornará um documento XML com um código de status 201. Para obter informações sobre o conteúdo do documento XML, consulte [Objeto POST](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html).<br />Se o valor não estiver definido ou for um valor inválido, o Amazon S3 retornará um documento vazio com um código de status 204.  Algumas versões do Adobe Flash Player não lidam muito bem com respostas HTTP com um corpo vazio. Para oferecer suporte a uploads por meio do Adobe Flash, recomendamos definir `success_action_status` como 201.  | Não | 
| signature | A assinatura HMAC criada com a chave de acesso secreta correspondente ao AWSAccessKeyId fornecido. Este campo é necessário se um documento de política estiver incluso na solicitação. <br />Para ter mais informações, consulte [Gerenciamento de identidade e acesso para o Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-iam.html). | Condicional | 
| x-amz-security-token | Um token de segurança usado por credenciais de sessão<br /> Se a solicitação estiver usando o Amazon DevPay, serão necessários dois campos do formulário `x-amz-security-token`: um para o token de produto e outro para o token de usuário.<br />Se a solicitação estiver usando credenciais de sessão, será necessário um formulário `x-amz-security-token`. Para obter mais informações, consulte [Credenciais de segurança temporárias](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) no *Manual do usuário do IAM*.<br /> | Não | 
| Outros nomes de campos com o prefixo x-amz-meta- | Metadados especificados pelo usuário. <br />O Amazon S3 não valida ou usa esses dados.<br />Para obter mais informações, consulte [Objeto PUT](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html). | Não | 
| file | Conteúdo de arquivo ou texto. <br />O arquivo ou conteúdo deve ser o último campo no formulário. Todos os campos abaixo deles serão ignorados.<br />Não carregue mais de um arquivo por vez. | Sim | 

## Criação de política
<a name="HTTPPOSTConstructPolicy"></a>

**Topics**
+ [Expiração](#HTTPPOSTExpiration)
+ [Condições](#PolicyConditions)
+ [Correspondência de condição](#ConditionMatching)
+ [Caracteres de escape](#HTTPPOSTEscaping)

A política é um documento JSON codificado em Base64 e UTF-8 que especifica as condições que a solicitação deve satisfazer, sendo usado para autenticar o conteúdo. Dependendo de como os documentos de política forem elaborados, eles podem ser usados por upload, por usuário, para todos os uploads ou de acordo com outros formatos que atendam as suas necessidades.

**nota**  
 Embora o documento de política seja opcional, o recomendamos fortemente em vez de tornar um bucket aberto ao público para gravação. 

Veja a seguir um exemplo de um documento de política:

```
 1. { "expiration": "2007-12-01T12:00:00.000Z",
 2. 
 3.   "conditions": [
 4. 
 5.     {"acl": "public-read" },
 6. 
 7.     {"bucket": "awsexamplebucket1" },
 8. 
 9.     ["starts-with", "$key", "user/eric/"],
10. 
11.   ]
12. 
13. }
```

O documento de política contém a expiração e as condições.

### Expiração
<a name="HTTPPOSTExpiration"></a>

O elemento expiração especifica a data de expiração da política no formato de data UTC ISO 8601. Por exemplo, "2007-12-01T12:00:00.000Z" especifica que a política não tem mais validade depois da meia-noite UTC do dia 1° de dezembro de 2007. A expiração é necessária em uma política.

### Condições
<a name="PolicyConditions"></a>

As condições no documento de política validam o conteúdo do objeto carregado. Cada campo especificado no formulário (exceto AWSAccessKeyId, assinatura, arquivo, política e nomes de campos com o prefixo x-ignore-) deve estar incluso na lista de condições. 

**nota**  
Caso existam vários campos com o mesmo nome, os valores devem ser separados por vírgulas. Por exemplo, se existem dois campos chamados "x-amz-meta-tag", o primeiro tem o valor "Ninja" e o segundo tem o valor "Stallman", o documento de política seria definido como `Ninja,Stallman`.  
 Todas as variáveis dentro do formulário são expandidas antes da validação da política. Portanto, qualquer correspondência de condição deve ser realizada nos campos expandidos. Por exemplo, se o campo chave for definido como `user/betty/${filename}`, a política deve ser `[ "starts-with", "$key", "user/betty/" ]`. Não insira `[ "starts-with", "$key", "user/betty/${filename}" ]`. Para obter mais informações, consulte [Correspondência de condição](#ConditionMatching). 

A tabela a seguir descreve as condições do documento de política.


| Nome do elemento | Descrição | 
| --- | --- | 
| acl | Especifica as condições que a ACL deve satisfazer. <br />Oferece suporte à correspondência exata e a `starts-with`.  | 
| content-length-range | Especifica os tamanhos mínimo e máximo permitidos para o conteúdo carregado. <br />Oferece suporte à correspondência por intervalo. | 
| Cache-Control, Content-Type, Content-Disposition, Content-Encoding, Expires | Cabeçalhos específicos para REST. <br />Oferece suporte à correspondência exata e a `starts-with`. | 
| chave | O nome da chave carregada.<br />Oferece suporte à correspondência exata e a `starts-with`.  | 
| success\_action\_redirect, redirect  | O URL para o qual o cliente é redirecionado após um upload bem-sucedido.<br />Oferece suporte à correspondência exata e a `starts-with`.  | 
| success\_action\_status | O código de status retornado ao cliente após o upload bem-sucedido se success\_action\_redirect não for especificado.<br />Oferece suporte à correspondência exata.  | 
| x-amz-security-token | Token de segurança do Amazon DevPay. <br />Cada solicitação que usa o Amazon DevPay requer dois campos do formulário `x-amz-security-token`: um para o token de produto e outro para o token de usuário. Consequentemente, os valores devem ser separados por vírgulas. Por exemplo, se o token de usuário é `eW91dHViZQ==` e o token de produto for `b0hnNVNKWVJIQTA=`, defina a entrada da política para: `{ "x-amz-security-token": "eW91dHViZQ==,b0hnNVNKWVJIQTA=" }`. | 
| Outros nomes de campos com o prefixo x-amz-meta- | Metadados especificados pelo usuário. <br />Oferece suporte à correspondência exata e a `starts-with`.  | 

**nota**  
 Se o seu toolkit traz campos adicionais (por exemplo, o Flash adiciona nome do arquivo), é necessário adicioná-los ao documento de política. Se essa funcionalidade puder ser controlada, adicione o prefixo `x-ignore-` ao campo para que o Amazon S3 ignore o recurso e para que futuras versões não sejam afetadas. 

### Correspondência de condição
<a name="ConditionMatching"></a>

A tabela a seguir descreve os tipos de correspondência de condição. Embora seja necessário especificar uma condição para cada campo especificado no formulário, é possível criar critérios de correspondência mais complexos especificando várias condições para um campo.


|  Condição  |  Descrição  | 
| --- | --- | 
| Correspondências exatas | Correspondências exatas verificam se os campos correspondem a valores específicos. Este exemplo indica que a ACL deve ser definida como pública para leitura:<pre>{"acl": "public-read" }</pre><br />Este exemplo é uma forma alternativa para indicar que a ACL deve ser definida como pública para leitura:<pre>[ "eq", "$acl", "public-read" ]</pre> | 
| Inicia com | Se o valor deve iniciar com um certo valor, use starts-with. Este exemplo indica que a chave deve iniciar com user/betty:<pre>["starts-with", "$key", "user/betty/"]</pre> | 
| Corresponder qualquer conteúdo | Para configurar a política para permitir qualquer conteúdo em um campo, use starts-with com um valor vazio. Este exemplo permite qualquer success\_action\_redirect:<pre>["starts-with", "$success_action_redirect", ""]</pre> | 
| Especificar intervalos | Para os campos que aceitam intervalos, separe os limites superior e inferior do intervalo com uma vírgula. Este exemplo permite um tamanho de arquivo entre 1 e 10 megabytes:<pre>["content-length-range", 1048579, 10485760]</pre> | 

### Caracteres de escape
<a name="HTTPPOSTEscaping"></a>

A tabela a seguir descreve os caracteres de escape dentro de um documento de política.


|  Sequência de escape  |  Descrição  | 
| --- | --- | 
| \\\\ | Barra invertida | 
| \\$ | Sinal de dólar | 
| \\b | Apagar | 
| \\f | Feed do formulário | 
| \\n | Nova linha | 
| \\r | Carriage return | 
| \\t | Guia horizontal | 
| \\v | Guia vertical | 
| \\u{{xxxx}} | Todos os caracteres do Unicode | 

## Criar uma assinatura
<a name="HTTPPOSTConstructingPolicySignature"></a>


| Etapa | Descrição | 
| --- | --- | 
| 1 | Codifique a política usando UTF-8. | 
| 2 | Codifique os bytes UTF-8 usando Base64. | 
| 3 | Assine a política com a chave de acesso secreta usando HMAC SHA-1. | 
| 4 | Codifique a assinatura SHA-1 usando Base64. | 

Para obter informações gerais sobre autenticação, consulte [Gerenciamento de identidade e acesso para o Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-iam.html).

## Redirecionamento
<a name="HTTPPOSTConstructingPolicyRedirection"></a>

Esta seção descreve como manipular redirecionamentos.

### Redirecionamento geral
<a name="HTTPPOSTGeneralRedirection"></a>

Após a conclusão da solicitação POST, o usuário é redirecionado para o local especificado no campo `success_action_redirect`. Se o Amazon S3 não for capaz de interpretar o URL, o campo `success_action_redirect` será ignorado.

Se `success_action_redirect` não for especificado, o Amazon S3 retornará o tipo de documento vazio especificado no campo `success_action_status`.

Se houver falha na solicitação POST, o Amazon S3 exibirá um erro e não fará o redirecionamento.

### Redirecionamento pré-upload
<a name="HTTPPOSTPreUpload"></a>

Se o bucket foi criado usando <CreateBucketConfiguration>, os usuários finais poderão exigir um redirecionamento. Se isso ocorrer, alguns navegadores podem manipular o redirecionamento de maneira incorreta. Isso é relativamente raro, mas é mais provável que ocorra logo após a criação do bucket.