Portfolio
Projekt: File Uploader

Projekt: File Uploader

Duben 2026

File Uploader je backendový projekt v Node.js, kde jsem spojil autentizaci uživatelů, upload souborů a práci s databází do jedné aplikace. Cílem bylo postavit bezpečný upload flow, kde každý uživatel vidí a spravuje jen svoje soubory.

Projekt je postavený na Express, Passport.js, Drizzle ORM, PostgreSQL a EJS šablonách.

Co projekt dělá

Aplikace obsahuje kompletní tok od registrace po správu souborů:

  • registrace a přihlášení pomocí emailu a hesla
  • ukládání session do PostgreSQL přes connect-pg-simple
  • upload souborů přes multer (limit 10 MB)
  • dashboard se seznamem souborů aktuálně přihlášeného uživatele
  • stažení souboru
  • smazání souboru (soubor z disku + metadata z databáze)

Architektura: Login -> Upload -> Dashboard

Stejně jako u Inventory App běží logika na serveru. Express zpracovává routy, Passport ověřuje uživatele, Multer ukládá soubory do složky uploads/ a PostgreSQL drží metadata o souborech.

Prohlížeč -> Express -> Middleware -> Databáze/Souborový systém -> EJS

Uživatel se přihlásí

Passport ověří údaje a vytvoří session

Uživatel odešle soubor přes formulář

Multer uloží soubor do uploads/

Controller uloží metadata do PostgreSQL

Dashboard vypíše soubory jen pro přihlášeného uživatele

Pracovní tok: Jak funguje upload

Po odeslání formuláře na /upload server:

  1. ověří, že je uživatel přihlášen (ensureAuthenticated)
  2. zpracuje multipart data přes upload.single("fileInput")
  3. uloží fyzický soubor do uploads/
  4. uloží metadata (name, path, size, userId) do tabulky files
  5. přesměruje uživatele zpět na dashboard

Příklad controlleru pro uložení metadat:

// src/controllers/upload.controller.js
async function uploadFile(req, res) {
	try {
		if (!req.file) {
			return res.status(400).send("No file uploaded.");
		}

		await db.insert(files).values({
			name: req.file.originalname,
			path: req.file.path,
			size: req.file.size,
			userId: req.user.id,
		});

		res.redirect("/dashboard");
	} catch (err) {
		res.status(500).send("Internal server error.");
	}
}

Co v repo najdete

Projekt obsahuje:

  • src/app.js - vstup aplikace, middleware, Passport, routy
  • src/config/ - konfigurace Passport, Session a Multer
  • src/routes/ - veřejné i chráněné routy (/dashboard, /upload, /logout)
  • src/controllers/ - logika pro registraci, login, dashboard a práci se soubory
  • src/middlewares/ - validace formulářů a ochrana rout
  • src/db/ - Drizzle schema a připojení k PostgreSQL
  • src/views/ - EJS šablony pro home, formuláře a dashboard
  • uploads/ - složka, kam se ukládají nahrané soubory
  • .env.example - ukázka proměnných DATABASE_URL, SESSION_SECRET, PORT

Nastavení a spuštění

Krok po kroku:

  1. vytvoř PostgreSQL databázi
  2. zkopíruj .env.example do .env a nastav DATABASE_URL + SESSION_SECRET
  3. vytvoř složku uploads v rootu projektu (mkdir uploads)
  4. nainstaluj závislosti npm install
  5. vytvoř schéma databáze npm run db:push
  6. spusť aplikaci npm run dev
  7. otevři http://localhost:3001

GitHub: File Uploader