
Serversko rešenje za sigurno otpremanje i dinamičku obradu slika

Nikola Filipovski
Full-Stack Veb Programer
Image Upload Server - Siguran, Brz i Potpuno Prilagodljiv
Ovaj projekat predstavlja prilagođeni Image Upload Server dizajniran za sigurnu, autentifikovanu i optimizovanu isporuku slika koje generišu korisnici. Napravljen je za moderne multi-tenant aplikacije gde svaka kompanija ili korisnik ima izolovana prava za upload, sigurno skladištenje i real-time transformacije slika po zahtevu.
Ključne funkcionalnosti
- Autentifikovani uploadi koristeći companyName + tajni token.
- Obrada upload-a u memoriji preko
multer. - Lossless i lossy optimizacija pomoću
sharp. - Dinamičke transformacije putem URL parametara (resize, grayscale, invert, blur, quality, fit modovi).
- Automatski sistem keširanja za obrađene slike.
- Immutable cache headeri za maksimalne performanse (ponašanje slično CDN-u).
- Per-kompanijski storage u izolovanim folderima.
Tehnološki stack
| Biblioteka / Alat | Svrha |
|---|---|
| Express.js | API server i routing |
| Multer (memoryStorage) | Obrada upload-a direktno iz form-data |
| Sharp | Optimizacija i transformacija slika |
| Node.js FS & FS/Promises | Upravljanje fajlovima i direktorijumima |
| CORS | Podrška za cross-origin zahteve eksternih klijenata |
| MySQL (pool.query) | Validacija korisnika i autentifikacija upload-a |
Logika autentifikacije
Svaki upload zahteva ime kompanije kao URL parametar i odgovarajući uploadServerSecret poslat u form-data.
Backend proverava podatke u bazi:
SELECT companyName, uploadServerSecret
FROM users
WHERE companyName = ?
LIMIT 1;
Samo ako se tajni token poklapa, slika se prihvata. U suprotnom, zahtev se odbija sa profesionalnim 403 Forbidden odgovorom.
Upload tok
- Klijent šalje
multipart/form-datasa ključemimage. - Server validira kompanijskog korisnika putem MySQL-a.
- Originalni fajl se čuva sa originalnom ekstenzijom.
- Server beleži upload sa timestamp-om, imenom kompanije i IP adresom.
- API vraća pristupačan URL, na primer:
https://server.com/companyName/filename
Dinamičke transformacije slika
Server može transformisati bilo koju uploadovanu sliku u realnom vremenu koristeći URL parametre:
w- širinah- visinaf- fit mod (cover, contain, fill, inside, outside)grey- intenzitet sivih tonovainvert=1- invertovanje bojablur- gaussian blurq- nivo kvaliteta
Primer zahteva:
/company/image.webp?w=400&h=400&f=cover&grey=1&q=90
Automatski sistem keširanja
Svaka jedinstvena transformacija se čuva u:
/uploads/company/cache/
Prilikom narednog zahteva sa istim parametrima, server odmah vraća kešovani fajl:
Cache-Control: public, max-age=31536000, immutable
Ovo čini server izuzetno brzim čak i za velike slike i kompleksne transformacije.
Sigurnost pri konkurentnim zahtevima
Sistem koristi in-memory mapu obećanja da spreči paralelnu generaciju istog keš fajla:
const generating = new Map();
To osigurava:
- Nema duplog opterećenja CPU-a
- Nema oštećenih keš fajlova
- Nema race condition problema
Struktura foldera
/uploads
/companyName
original-image.png
image-12345.jpg
/cache
transformed-image.webp
Primeri upotrebe
- Profil slike
- CMS sistemi
- Upload na dashboardu
- Portfolio hosting slika
- Multi-tenant SaaS aplikacije
Zaključak
Ovaj upload server je lagan, skalabilan, siguran i lako se integriše sa bilo kojom front-end ili back-end aplikacijom. Zamenjuje third-party servise poput Cloudinary-ja za projekte koji žele potpunu kontrolu, niže troškove ili prilagođenu logiku.
Saradnja sa mnom
Ako vam je potreban sličan prilagođeni image upload server ili želite da integrišete ovaj u svoj sistem, mogu ga razviti ili prilagoditi za vas.
Podeli ovaj projekat:
- Podeli projekat Serversko rešenje za sigurno otpremanje i dinamičku obradu slika na Facebooku
- Podeli projekat Serversko rešenje za sigurno otpremanje i dinamičku obradu slika na WhatsApp-u
- Podeli projekat Serversko rešenje za sigurno otpremanje i dinamičku obradu slika na mreži X
- Podeli projekat Serversko rešenje za sigurno otpremanje i dinamičku obradu slika na LinkedIn-u
- Podeli projekat Serversko rešenje za sigurno otpremanje i dinamičku obradu slika na Reddit-u