Skip to content

HaroldoFV/S3MultipartFileUpload

Repository files navigation

.NET 8 Multipart S3 Upload Project

This project is a .NET 8 API application designed to handle file uploads to an Amazon S3 bucket. It prominently features the use of Amazon S3's low-level multipart upload API, enabling large files to be sent in smaller, manageable, and parallelized parts.

Features

  • Multipart Upload: The project leverages Amazon S3's multipart upload approach, designed to improve the speed and reliability of file uploads by breaking them into smaller pieces.

  • Part Management: Each upload is split into multiple "parts" which are sent in parallel to improve upload speed. If any part fails, only that part needs to be resent instead of the entire file.

  • Large File Support: Due to the nature of multipart upload, this project can handle uploading large files which would be unwieldy to send in one go.

Upload State Persistence

This project also utilizes Amazon DynamoDB to persist the state of the upload. This feature allows uploads to be resumed if they fail midway. The current state of the upload is saved in a DynamoDB table, including information about parts that have been uploaded and those yet to be uploaded. This allows for better control and management of uploads, especially for large files that are sent in multiple parts.

Preliminary Setup

Before running the application, several configuration steps and resource setups are required:

  1. DynamoDB Table Creation: A DynamoDB table named UploadState should be created. This table must have an attribute named KeyName that is used as the partition key.

  2. AWS Bucket Creation: The application requires an AWS S3 Bucket to store uploaded files. Ensure you create a bucket in the AWS S3 service and take note of the bucket name.

  3. AWS Credentials Setup: The AWS credentials should be configured in one of the following ways:

    • Directly on your machine: Use the AWS CLI with the aws configure command.
      aws configure
    • In Docker: Create a .env file in the root of your project with all necessary environment variables. These might include AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION, AWS_S3_BUCKET_NAME, and any other environment-specific variables.

Remember to add .env to your .gitignore file to prevent accidentally pushing sensitive information to a public repository.

Instructions to Run

JetBrains Rider

To run this application on JetBrains Rider:

  1. Ensure that both the DynamoDB table and the AWS S3 bucket have been created and that the AWS credentials have been configured on your machine.
  2. Clone the repository to your local development environment.
  3. Open JetBrains Rider and select File > Open.
  4. Navigate to the project directory and click OK.
  5. Once the project is loaded, select Run > Start Without Debugging.

The application should now be running and accessible via localhost. The port number will vary based on your configuration.

Docker Compose

To run this application with Docker Compose:

  1. Ensure that the .env file is located at the root of your project directory for Docker to use.
  2. Run the following command to start your application:
    docker-compose up

The application should now be accessible on the ports defined in your docker-compose.yml file.

Projeto de Upload Multipart para S3 em .NET 8

Este projeto é uma aplicação .NET 8 API desenvolvida para realizar o upload de arquivos para um bucket do Amazon S3. A característica mais notável deste projeto é a utilização da API de upload multipart de nível baixo da Amazon S3, que permite que arquivos de grande porte sejam enviados em partes menores, gerenciáveis e paralelizadas.

Funcionalidades

  • Upload Multipart: O projeto se beneficia da abordagem de upload multipart da Amazon S3, que é projetada para melhorar a velocidade e a confiabilidade dos uploads, dividindo-os em partes menores.

  • Gerenciamento de Partes: Cada upload é dividido em múltiplas "partes", as quais são enviadas em paralelo para aumentar a velocidade do upload. Caso alguma parte falhe, somente essa parte precisa ser reenviada, ao invés do arquivo completo.

  • Suporte para Arquivos Grandes: Devido à natureza do upload multipart, este projeto é capaz de fazer upload de arquivos grandes, que seriam problemáticos para serem enviados de uma só vez.

Persistência do Estado do Upload

Este projeto também utiliza o Amazon DynamoDB para persistir o estado do upload. Esta funcionalidade permite que os uploads sejam retomados caso falhem no meio do processo. O estado atual do upload é salvo em uma tabela do DynamoDB, incluindo informações sobre as partes que já foram enviadas e as que ainda precisam ser enviadas . Isso permite melhor controle e gerenciamento do upload, especialmente para arquivos grandes que são enviados em partes múltiplas.

Configuração Preliminar

Antes de executar a aplicação, várias etapas de configuração e definição de recursos são necessárias:

  1. Criação de Tabela no DynamoDB: Uma tabela no DynamoDB com o nome de UploadState deve ser criada. Esta tabela deve possuir um atributo chamado KeyName, que será utilizado como partition key.

  2. Criação de Bucket AWS: A aplicação precisa de um bucket no AWS S3 para armazenar os arquivos enviados. Certifique-se de criar um bucket no serviço AWS S3 e anote o nome do bucket.

  3. Configuração de Credenciais AWS: As credenciais AWS devem ser configuradas de uma das seguintes formas:

    • Diretamente na sua máquina: Use a CLI da AWS com o comando aws configure.
    aws configure
    • No Docker: Crie um arquivo .env na raiz do seu projeto com todas as variáveis de ambiente necessárias. Estas podem incluir AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION, AWS_S3_BUCKET_NAME e quaisquer outras variáveis específicas do ambiente.

Lembre-se de adicionar .env ao seu arquivo .gitignore para evitar publicar informações sensíveis em um repositório público acidentalmente.

Instruções para Rodar

JetBrains Rider

Para rodar esta aplicação no JetBrains Rider:

  1. Certifique-se que a tabela DynamoDB e o bucket AWS S3 foram criados e que as credenciais da AWS foram configuradas em sua máquina.
  2. Clone o repositório para o seu ambiente de desenvolvimento local.
  3. Abra o JetBrains Rider e selecione File > Open.
  4. Navegue até o diretório do projeto e clique em OK.
  5. Assim que o projeto for carregado, selecione Run > Start Without Debugging.

A aplicação deve estar rodando e acessível por meio do localhost. O número do porto variará conforme sua configuração.

Docker Compose

Para rodar esta aplicação com Docker Compose:

  1. Certifique-se que o arquivo .env está localizado na raiz do diretório do seu projeto para ser usado pelo Docker.
  2. Execute o seguinte comando para iniciar sua aplicação:
    docker-compose up

A aplicação agora deve estar acessível nas portas definidas no seu arquivo docker-compose.yml.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published