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:
- ověří, že je uživatel přihlášen (
ensureAuthenticated) - zpracuje multipart data přes
upload.single("fileInput") - uloží fyzický soubor do
uploads/ - uloží metadata (
name,path,size,userId) do tabulkyfiles - 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, routysrc/config/- konfigurace Passport, Session a Multersrc/routes/- veřejné i chráněné routy (/dashboard,/upload,/logout)src/controllers/- logika pro registraci, login, dashboard a práci se souborysrc/middlewares/- validace formulářů a ochrana routsrc/db/- Drizzle schema a připojení k PostgreSQLsrc/views/- EJS šablony pro home, formuláře a dashboarduploads/- složka, kam se ukládají nahrané soubory.env.example- ukázka proměnnýchDATABASE_URL,SESSION_SECRET,PORT
Nastavení a spuštění
Krok po kroku:
- vytvoř PostgreSQL databázi
- zkopíruj
.env.exampledo.enva nastavDATABASE_URL+SESSION_SECRET - vytvoř složku
uploadsv rootu projektu (mkdir uploads) - nainstaluj závislosti
npm install - vytvoř schéma databáze
npm run db:push - spusť aplikaci
npm run dev - otevři
http://localhost:3001
GitHub: File Uploader