{"id":20750635,"url":"https://github.com/marlinsk/nestjs-backend-local-file-upload","last_synced_at":"2026-04-10T07:19:58.290Z","repository":{"id":179991199,"uuid":"663330984","full_name":"Marlinsk/nestjs-backend-local-file-upload","owner":"Marlinsk","description":"Aplicação de upload de arquivos, onde o arquivo é armazenado localmente dentro do back-end. Aplicação desenvolvida com node.js, nest.js, multer, docker-compose, postgresql, prisma orm.","archived":false,"fork":false,"pushed_at":"2023-07-22T16:32:06.000Z","size":354,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-22T20:48:03.390Z","etag":null,"topics":["docker","docker-compose","express","javascript","multer","nestjs","nodejs","postgresql","prisma","typescript","upload-file"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Marlinsk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-07T04:16:13.000Z","updated_at":"2024-04-11T21:35:43.000Z","dependencies_parsed_at":null,"dependency_job_id":"675ac495-edea-48a6-9176-0dbf158dc85a","html_url":"https://github.com/Marlinsk/nestjs-backend-local-file-upload","commit_stats":null,"previous_names":["marlinsk/upload-file-nestjs-application","marlinsk/nestjs-backend-local-file-upload"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Marlinsk/nestjs-backend-local-file-upload","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marlinsk%2Fnestjs-backend-local-file-upload","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marlinsk%2Fnestjs-backend-local-file-upload/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marlinsk%2Fnestjs-backend-local-file-upload/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marlinsk%2Fnestjs-backend-local-file-upload/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Marlinsk","download_url":"https://codeload.github.com/Marlinsk/nestjs-backend-local-file-upload/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marlinsk%2Fnestjs-backend-local-file-upload/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260826506,"owners_count":23068778,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-compose","express","javascript","multer","nestjs","nodejs","postgresql","prisma","typescript","upload-file"],"created_at":"2024-11-17T08:28:10.451Z","updated_at":"2026-04-10T07:19:53.271Z","avatar_url":"https://github.com/Marlinsk.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003cimg src=\"https://github.com/Marlinsk/upload-file-nestjs-application/blob/main/.github/upload-file.png\" width=\"48px\" height=\"48px\"\u003e Aplicação back-end NestJs de upload de arquivos\r\nO grande recurso dessa aplicação é servir como um tipo de canal para salvar arquivos, que são enviados via web. Para esse canal funcionar em uma aplicação desenvolvida em **Node.js** e **Nest.js**, utiliza-se o **Express.js middleware multer**, através dele podemos tratar e manipular diferentes tipos e formatos de arquivos que o back-end captura em uma **requisição HTTP**. Para poder salvar o arquivo recebido, existem duas formas, a primeira através de integração com algum serviço de cloud como por exemplo um **Bucket** na **AWS**, a segunda opção é salvar em uma pasta de uploads dentro da aplicação. A opção de salvar o arquivo dentro da aplicação não é muito recomendável ser feito em aplicações que são alocadas dentro de conteineres, pois se o container cair, os arquivos somem ou são corrompidos, por isso utiliza-se essa técnica em projetos de escala menor ou de estudos, mas vale a pena fazer para entender como tudo funciona por baixo dos panos. Nesta aplicação, optei por utilizar a segunda opção, por ser gratuita e não ser dependente de um serviço de cloud.\r\n\r\n## Descrição\r\nA aplicação tem dois componentes de funcionalidade, sendo elas o com o banco de dados, onde é salvo os dados importantes do arquivo como por exemplo o nome e o caminho do arquivo, isso é feito para auxiliar na gestão do arquivo por meio de requisição HTTP, tendo esses dados salvos em um banco de dados, fica fácil do back-end buscar esse arquivo na pasta. O outro componente serve para salvar o arquivo na pasta de upload, esse componente na ocasião pega o nome original do arquivo e renomeia a partir de um conjunto de caracteres e depois o salva na pasta de uploads, isso é feito na ocasião para não ocorrer problemas de nome de arquivo igual dentro do sistema. A forma como esses arquivos são geridos são a partir dos dados salvos no banco de dados.\r\n\r\n## Clonando o projeto em sua máquina\r\nExecute o comando abaixo para clonar o projeto:\r\n```\r\ngit clone https://github.com/Marlinsk/upload-file-nestjs-application.git\r\n```\r\nApós clonar o repositório instale as dependências executando comando abaixo: \r\n```\r\nnpm install\r\n```\r\n\u003e Finalizando isso vamos para a próxima etapa que é gerar o banco de dados utilizando o docker compose.\r\n\r\n## Criação do banco de dados com Docker 🐳\r\nExecute o seguinte comando no terminal para criar uma imagem com o banco de dados PostgreSQL:\r\n```\r\ndocker-compose -f docker-compose.yml up -d\r\n```\r\n\u003e Após a execução a imagem do banco de dados da aplicação será gerada no seu Docker.\r\n\r\n## Criando a estrutura básica do banco de dados 🐘\r\nCrie um arquivo **.env** e cole o schema abaixo para se conectar com o banco de dados:\r\n```\r\nDATABASE_URL=\"postgresql://prisma:prisma@localhost:5433/upfiledb?schema=public\"\r\n```\r\nPara criar as tabelas no banco de dados, execute o seguinte comando:\r\n```\r\nnpx prisma db push\r\n```\r\n\r\n## Rodando a aplicação 🚀\r\n**Obs.:** Antes de por a aplicação para rodar, certifique-se que a imagem do banco de dados docker esteja rodando, caso contrário ocorrerá um erro. \r\n\r\nPara executar o servidor rode o seguinte comando:\r\n```\r\nnpm run start:dev\r\n```\r\n\u003e Se estiver tudo ok aparecerá a seguinte mensagem no terminal: Server starting 🚀 http://localhost:3000. \r\n\r\n## Rotas HTTP da aplicação 🚏\r\nDescrição das rotas da aplicação junto da instrução de como fazer a requisição pelo **Postman**.\r\n\r\n**POST** Upload file\r\n\r\nRota de upload do arquivo\r\n\r\n\u003e /\r\n\r\nPara poder fazer a requisição nesta rota via **Postman,** acesse a aba body e clique em form-data, feito isso basta colocar o nome do campo na coluna **Key** para file e mudar o tipo dele para arquivo, feito isso aparecerá na coluna **Value** o **Select files**, clique nele e selecione o arquivo que deseja fazer upload, após isso só fazer a requisição. \r\n\r\n\u003cimg align=\"center\" src=\"https://github.com/Marlinsk/upload-file-nestjs-application/blob/main/assets/255339216-64043c98-4115-4732-a618-ad0d38222c5e.png\"\u003e\r\n\r\n**Obs.:** Em outras ferramentas, basta procurar uma opção de form-data na aba de corpo da requisição.\r\n\r\n**GET** List all files\r\n\r\nLista todos os dados dos arquivos salvos na pasta **uploads**\r\n\r\n\u003e /\r\n\r\nBasta fazer uma requisição http do tipo **GET** sem nenhum parâmetro na url\r\n\r\n\u003cimg align=\"center\" src=\"https://github.com/Marlinsk/upload-file-nestjs-application/blob/main/assets/255339439-552c7d7f-95be-4ed7-9e19-ece127df52f6.png\"\u003e\r\n\r\n**GET** Get file\r\n\r\nBusca um arquivo salvo na pasta **uploads** pelo id\r\n\r\n\u003e /:id\r\n\r\nFaça uma requisição http do tipo **GET** com o id na url\r\n\r\n\u003cimg align=\"center\" src=\"https://github.com/Marlinsk/upload-file-nestjs-application/blob/main/assets/255340143-8da5448f-4edf-4213-a96e-a2f45abb8dad.png\"\u003e\r\n\r\n**PATCH** Change file\r\n\r\nSubstitui o arquivo salvo com aquele id\r\n\r\n\u003e /:id\r\n\r\nRepita o mesmo processo ensinado na requisição POST, mas passando o id na url do arquivo que deseja mudar, feito isso faça a requisição http no tipo PATCH.\r\n\r\n\u003cimg align=\"center\" src=\"https://github.com/Marlinsk/upload-file-nestjs-application/blob/main/assets/255339159-bd16e0d5-272c-49b4-95c4-d56c20a6a37b.png\"\u003e\r\n\r\n**DELETE** Remove file\r\n\r\nRemove o arquivo a partir do id dele registrado no banco\r\n\r\n\u003e /:id\r\n\r\nFaça a requisição passando o id, fazendo isso o arquivo é removido junto com o dado salvo no banco de dados.\r\n\r\n\u003cimg align=\"center\" src=\"https://github.com/Marlinsk/upload-file-nestjs-application/blob/main/assets/255340245-43c6f738-b0d1-42d7-ab12-9e60e7d8c423.png\"\u003e\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarlinsk%2Fnestjs-backend-local-file-upload","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarlinsk%2Fnestjs-backend-local-file-upload","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarlinsk%2Fnestjs-backend-local-file-upload/lists"}