API para upload e download de arquivos no AWS S3.
- Download de arquivos;
- Upload de arquivos;
openapi: 3.0.1
info:
title: File Storage api S3
description: Api para fazer upload/download de arquivos no S3
contact:
name: gasfgrv
url: https://github.com/gasfgrv
email: gustavo_almeida11@hotmail.com
version: V1
servers:
- url: http://localhost:8080
description: Generated server url
paths:
/v1/arquivos/upload:
post:
tags:
- arquivos-controller
operationId: upload
requestBody:
content:
multipart/form-data:
schema:
required:
- arquivo
type: object
properties:
arquivo:
type: string
format: binary
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Resposta'
/v1/arquivos/download:
get:
tags:
- arquivos-controller
operationId: download
parameters:
- name: nomeArquivo
in: query
required: true
schema:
type: string
responses:
"200":
description: OK
content:
application/octet-stream:
schema:
type: string
format: binary
components:
schemas:
Links:
type: object
additionalProperties:
$ref: '#/components/schemas/Link'
Resposta:
type: object
properties:
mensagem:
type: string
_links:
$ref: '#/components/schemas/Links'
Link:
type: object
properties:
href:
type: string
hreflang:
type: string
title:
type: string
type:
type: string
deprecation:
type: string
profile:
type: string
name:
type: string
templated:
type: boolean
Para rodar esse projeto, você vai precisar adicionar as seguintes variáveis de ambiente.
AWS_ACCESS_KEY
: ID de chave de acesso para autenticação na AWSAWS_REGION
: Região onde se encontram recursos na AWSAWS_SECRET_KEY
: Chave de acesso secreta para autenticação na AWSAWS_SERVICE_ENDPOINT
: URL do ponto de entrada para um serviço da Web da AWS
Clone o projeto
git clone git@github.com:gasfgrv/file-storage-api.git
Entre no diretório do projeto
cd file-storage-api
Instale as dependências
mvn clean package -DskipTests
Subir recursos na AWS
cd infra/
terraform init
terraform plan
terraform apply -auto-approve
Inicie a aplicação, pode ser pela IDE (Intellij ou Eclipse), ou rodando o seguinte comando:
java \
-Daws.serviceEndpoint=${AWS_SERVICE_ENDPOINT} \
-Daws.region=${AWS_REGION} \
-Daws.accessKey=${AWS_ACCESS_KEY} \
-Daws.secretKey=${AWS_SECRET_KEY} \
-jar target/file-storage-api-s3-0.0.1-SNAPSHOT.jar
Use a collection para ajudar com os endpoints:
Obs: Para remover os recursos da aws, evitando custos desncessários, use o comando terraform destroy -auto-approve
dentro da pasta de infra
Para rodar os testes, rode o seguinte comando
mvn tests
- Java 17
- Spring Boot 3
- Maven
- spring hateoas
- spring web
- lombok
- springdoc-openapi-starter-webmvc-ui
- spring validation
- testcontainers
- localstack
- aws sdk