Upload S3 NestJS é uma aplicação backend desenvolvida com NestJS que permite o upload de arquivos públicos para o Amazon S3. Este projeto serve como um guia prático para integrar o Amazon S3 em uma aplicação NestJS, facilitando o armazenamento e a gestão de arquivos estáticos de maneira eficiente e escalável.
- Upload de Arquivos: Permite o upload de arquivos através de endpoints RESTful.
- Integração com Amazon S3: Armazena os arquivos no Amazon S3, garantindo alta disponibilidade e escalabilidade.
- Configuração de Variáveis de Ambiente: Utiliza o módulo
@nestjs/config
para gerenciar configurações sensíveis. - Validação e Segurança: Implementa melhores práticas de segurança ao interagir com o Amazon S3.
- NestJS - Framework Node.js para construção de aplicações server-side.
- Amazon S3 - Serviço de armazenamento de objetos da AWS.
- AWS SDK - Biblioteca oficial da AWS para interagir com os serviços da AWS.
- Multer - Middleware para manipulação de
multipart/form-data
. - Multer S3 - Integração do Multer com o Amazon S3.
- TypeScript - Superset do JavaScript que adiciona tipagem estática.
Antes de começar, você precisará ter instalado em sua máquina as seguintes ferramentas:
- Node.js (v14 ou superior)
- npm (gerenciador de pacotes do Node.js)
- Conta na AWS com acesso ao Amazon S3
-
Clone o Repositório
git clone https://github.com/diogofelizardo/upload-s3-nestjs.git
-
Navegue até o Diretório do Projeto
cd upload-s3-nestjs
-
Instale as Dependências
npm install
-
Configurar Variáveis de Ambiente
Crie um arquivo
.env
na raiz do projeto e adicione as seguintes variáveis:AWS_ACCESS_KEY_ID=seu_access_key_id AWS_SECRET_ACCESS_KEY=seu_secret_access_key AWS_S3_BUCKET_NAME=nome_do_seu_bucket AWS_S3_REGION=sua-região
Nota: Certifique-se de adicionar o arquivo
.env
ao seu.gitignore
para manter as credenciais seguras. -
Configurar o Bucket no Amazon S3
-
Criar um Bucket:
- Acesse o console do Amazon S3.
- Clique em "Create bucket".
- Defina um nome único para o bucket e selecione a região desejada.
- Configure as permissões conforme necessário (para arquivos públicos, ajuste as configurações de acordo).
-
Configurar Políticas de Bucket:
-
Acesse a aba "Permissions" do seu bucket.
-
Adicione a seguinte política de bucket substituindo
YOUR_BUCKET_NAME
pelo nome do seu bucket:{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*" } ] }
-
Salve a política e verifique as configurações de bloqueio de acesso público para garantir que a política esteja sendo aplicada corretamente.
-
-
-
Inicie a Aplicação
npm run start
-
Acesse o Endpoint de Upload
Utilize ferramentas como Postman ou Insomnia para testar o upload de arquivos.
- Método:
POST
- URL:
http://localhost:3000/upload
- Body: Selecione
form-data
, adicione um campofile
do tipoFile
e selecione o arquivo que deseja fazer upload.
Exemplo de Resposta:
{ "url": "https://nome_do_seu_bucket.s3.sua-região.amazonaws.com/1234567890-seuarquivo.ext" }
- Método:
upload-s3-nestjs/
├── src/
│ ├── upload/
│ │ ├── upload.controller.ts
│ │ ├── upload.module.ts
│ │ └── upload.service.ts
│ ├── app.module.ts
│ └── main.ts
├── .env
├── .gitignore
├── package.json
├── README.md
└── tsconfig.json
- NestJS: Framework progressivo para construir aplicações Node.js eficientes e escaláveis.
- Amazon S3: Serviço de armazenamento de objetos escalável e de alta disponibilidade da AWS.
- AWS SDK for JavaScript: Biblioteca oficial da AWS para interagir com os serviços da AWS.
- Multer: Middleware para manipulação de
multipart/form-data
, utilizado para uploads de arquivos. - Multer S3: Integração do Multer com o Amazon S3.
- TypeScript: Superset do JavaScript que adiciona tipagem estática.
Contribuições são sempre bem-vindas! Sinta-se à vontade para abrir uma issue ou enviar um pull request com melhorias, correções de bugs ou novas funcionalidades.
-
Fork este repositório
-
Crie uma Branch para sua Feature ou Bugfix
git checkout -b feature/nova-feature
-
Commit suas alterações
git commit -m 'Adiciona nova feature'
-
Push para a Branch
git push origin feature/nova-feature
-
Abra um Pull Request
Este projeto está licenciado sob a licença MIT.
Diogo Felizardo - @felizardo.dev - [email protected]
Projeto Link: https://github.com/diogofelizardo/upload-s3-nestjs