Serversko rešenje za sigurno otpremanje i dinamičku obradu slika
Slika koja predstavlja projekat Serversko rešenje za sigurno otpremanje i dinamičku obradu slika

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

Autor Nikola Filipovski
Fotografija autora Nikole Filipovskog

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 / AlatSvrha
Express.jsAPI server i routing
Multer (memoryStorage)Obrada upload-a direktno iz form-data
SharpOptimizacija i transformacija slika
Node.js FS & FS/PromisesUpravljanje fajlovima i direktorijumima
CORSPodrš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

  1. Klijent šalje multipart/form-data sa ključem image.
  2. Server validira kompanijskog korisnika putem MySQL-a.
  3. Originalni fajl se čuva sa originalnom ekstenzijom.
  4. Server beleži upload sa timestamp-om, imenom kompanije i IP adresom.
  5. 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 - širina
  • h - visina
  • f - fit mod (cover, contain, fill, inside, outside)
  • grey - intenzitet sivih tonova
  • invert=1 - invertovanje boja
  • blur - gaussian blur
  • q - 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.

Kontaktirajte me putem kontakt forme