

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Demonstração de upload da coreHTTP básica do Amazon S3
<a name="core-http-s3-upload-demo"></a>

**Importante**  <a name="deprecation-message-demo"></a>
Essa demonstração está hospedada no repositório Amazon-FreeRTOS, que está preterido. Recomendamos [começar aqui](freertos-getting-started-modular.md) ao criar um novo projeto. Se você já tem um projeto FreeRTOS existente baseado no repositório Amazon-FreeRTOS que está preterido, consulte o [Guia de migração do repositório Github do Amazon FreeRTOS](github-repo-migration.md).

## Introdução
<a name="core-http-s3-upload-demo-intro"></a>

Este exemplo demonstra como enviar uma solicitação PUT ao servidor HTTP do Amazon Simple Storage Service (Amazon S3) e fazer upload de um arquivo pequeno. Ele também executa uma solicitação GET para verificar o tamanho do arquivo após o upload. Este exemplo usa uma [interface de transporte de rede](https://freertos.org/network-interface.html) que usa mbedTLS para estabelecer uma conexão mutuamente autenticada entre um cliente de dispositivo de IoT executando coreHTTP e o servidor HTTP do Amazon S3.

**nota**  
Para configurar e executar as demonstrações do FreeRTOS, siga as etapas em [Conceitos básicos do FreeRTOS](freertos-getting-started.md).

### Thread único versus thread múltiplo
<a name="core-http-s3-upload-demo-threads"></a>

Existem dois modelos de uso da coreHTTP, com *thread único* e com *threads múltiplos* (multitarefas). Embora a demonstração nesta seção execute a biblioteca HTTP em um tópico, ela realmente demonstra como usar a coreHTTP em um ambiente de tópico único. A API HTTP é usada somente por uma tarefa nesta demonstração. Embora as aplicações com thread único devam chamar repetidamente a biblioteca HTTP, as aplicações com threads múltiplos podem enviar solicitações HTTP em segundo plano em uma tarefa de agente (ou daemon).

## Organização de código-fonte
<a name="core-http-s3-upload-demo-source-code-organization"></a>

O arquivo fonte de demonstração tem um nome `http_demo_s3_upload.c` e pode ser encontrado no `freertos/demos/coreHTTP/` diretório e no [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_upload.c)site.

## Configuração de conexão do servidor HTTP do Amazon S3
<a name="core-http-s3-upload-demo-configure-server"></a>

Esta demonstração usa uma URL pré-assinada para se conectar ao servidor HTTP do Amazon S3 e autorizar o acesso ao objeto para download. A conexão TLS do servidor HTTP do Amazon S3 usa somente a autenticação do servidor. No nível da aplicação, o acesso ao objeto é autenticado com os parâmetros na consulta de URL pré-assinada. Siga as etapas abaixo para configurar sua conexão com a AWS.

1. Configure uma AWS conta:

   1. Se você ainda não o fez, [crie uma AWS conta](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/).

   1. As contas e permissões são definidas usando AWS Identity and Access Management (IAM). O IAM é usado para gerenciar as permissões de cada usuário em sua conta. Por padrão, um usuário não tem permissões até que sejam concedidas pelo proprietário raiz.

      1. Para adicionar um usuário à sua AWS conta, consulte o [Guia do usuário do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/).

      1. Conceda permissão à sua AWS conta para acessar os FreeRTOS adicionando esta AWS IoT política:
         + Amazon S3 FullAccess

1. Criar um bucket no Amazon S3 seguindo as etapas em [Como criar um bucket do S3?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html) no *Guia do usuário do Amazon Simple Storage Service*.

1. Faça upload de um arquivo no Amazon S3 seguindo as etapas em [Como fazer upload de arquivos e pastas em um bucket do S3?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html).

1. Gere um URL pré-assinado usando o script localizado no arquivo `FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/presigned_urls_gen.py`.

   Para obter instruções de uso, consulte o arquivo `FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/README.md`. 

## Funcionalidade
<a name="core-http-s3-upload-demo-functionality"></a>

A demonstração primeiro se conecta ao servidor HTTP do Amazon S3 com a autenticação do servidor TLS. Em seguida, cria uma solicitação HTTP para carregar os dados especificados em `democonfigDEMO_HTTP_UPLOAD_DATA`. E verifica se o arquivo foi carregado com êxito solicitando o tamanho do arquivo, depois de fazer upload do arquivo. O código-fonte da demonstração pode ser encontrado no [GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_upload.c)site. 

### Conexão ao servidor HTTP do Amazon S3
<a name="core-http-s3-upload-demo-connecting"></a>

A [ connectToServerWithBackoffRetries](https://github.com/aws/amazon-freertos/blob/main/demos/common/http_demo_helpers/http_demo_utils.c#L131-L170)função tenta fazer uma conexão TCP com o servidor HTTP. Se a conexão falhar, ela tentará novamente após um tempo limite. O valor do tempo limite aumentará exponencialmente até que o número máximo de tentativas ou o valor do tempo limite seja atingido. A função `connectToServerWithBackoffRetries` retorna um status de falha se a conexão TCP com o servidor não puder ser estabelecida após o número configurado de tentativas.

A função `prvConnectToServer` demonstra como estabelecer uma conexão com o servidor HTTP do Amazon S3 usando somente a autenticação do servidor. Ela usa a interface de transporte baseada em mbedTLS que é implementada no arquivo `FreeRTOS-Plus/Source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using_mbedtls.c`. A definição de `prvConnectToServer` pode ser encontrada no [GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_upload.c#L306-L366)site. 

### Upload de dados
<a name="core-http-s3-upload-demo-upload-data"></a>

A função `prvUploadS3ObjectFile` demonstra como criar uma solicitação PUT e especificar o arquivo para fazer upload. O bucket do Amazon S3 para o qual é feito o upload do arquivo e o nome desse arquivo são especificados na URL pré-assinada. Para economizar memória, o mesmo buffer é usado para os cabeçalhos de solicitação e para receber a resposta. A resposta é recebida de forma síncrona usando a função de API `HTTPClient_Send`. Um código de status de resposta `200 OK` é esperado do servidor HTTP do Amazon S3. Qualquer outro código de status é um erro.

O código-fonte do `prvUploadS3ObjectFile()` pode ser encontrado no [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_upload.c#L539-L632)site.

### Verificação do upload
<a name="core-http-s3-upload-demo-verifying-data"></a>

A função `prvVerifyS3ObjectFileSize` chama `prvGetS3ObjectFileSize` para recuperar o tamanho do objeto no bucket do S3. Atualmente, o servidor HTTP do Amazon S3 é compatível com solicitações HEAD usando uma URL pré-assinada, portanto, o 0 (zero) byte é solicitado. O campo de cabeçalho da resposta `Content-Range` contém o tamanho do arquivo. Uma resposta `206 Partial Content` é esperada do servidor. Qualquer outro código de status de resposta é um erro. 

O código-fonte do `prvGetS3ObjectFileSize()` pode ser encontrado no [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_upload.c#L370-L535)site. 