Leistungsstarker Node.js Upload-Server aus eigener Entwicklung
Bild, das das Projekt Leistungsstarker Node.js Upload-Server aus eigener Entwicklung darstellt

Leistungsstarker Node.js Upload-Server aus eigener Entwicklung

Autor Nikola Filipovski
Foto des Autors Nikola Filipovski

Nikola Filipovski

Full-Stack Webentwickler

Server für Bild-Uploads - Sicher, Schnell und Vollständig Anpassbar

Dieses Projekt ist ein maßgeschneiderter Image Upload Server, der sichere, authentifizierte und hoch optimierte Bereitstellung von Nutzerbildern ermöglicht. Er wurde entwickelt, um moderne Multi-Tenant-Anwendungen zu unterstützen, bei denen jedes Unternehmen oder jeder Nutzer isolierte Upload-Rechte, sicheren Speicher und Echtzeit-Transformationen auf Abruf hat.

Hauptfunktionen

  • Authentifizierte Uploads mit companyName + Secret-Token.
  • Upload-Verarbeitung im Speicher über multer.
  • Lossless und lossy Optimierung mit sharp.
  • Dynamische Transformationen über URL-Parameter (resize, grayscale, invert, blur, quality, Fit-Modi).
  • Automatisches Caching-System für verarbeitete Bilder.
  • Immutable Cache Header für maximale Leistung (CDN-ähnliches Verhalten).
  • Speicherung pro Unternehmen in isolierten Ordnern.

Technologie-Stack

Bibliothek / ToolZweck
Express.jsAPI-Server und Routing
Multer (memoryStorage)Datei-Uploads direkt aus form-data verarbeiten
SharpBildoptimierung & Transformation
Node.js FS & FS/PromisesDateiverwaltung und Verzeichnissteuerung
CORSCross-Origin-Anfragen für externe Clients unterstützen
MySQL (pool.query)Benutzervalidierung und Upload-Authentifizierung

Authentifizierungs-Logik

Jeder Upload benötigt den Firmennamen als URL-Parameter und ein passendes uploadServerSecret im Form-Data. Das Backend prüft die Angaben in der Datenbank:

SELECT companyName, uploadServerSecret 
FROM users 
WHERE companyName = ? 
LIMIT 1;

Nur wenn das Secret übereinstimmt, wird das Bild akzeptiert. Andernfalls wird die Anfrage mit 403 Forbidden abgelehnt.

Upload Ablauf

  1. Client sendet multipart/form-data mit dem Schlüssel image.
  2. Server validiert den Unternehmensbenutzer über MySQL.
  3. Originaldatei wird mit originaler Dateiendung gespeichert.
  4. Server protokolliert Upload mit Timestamp, Firmenname und IP-Adresse.
  5. API liefert eine zugängliche URL, z.B.:
    https://server.com/companyName/filename

Dynamische Bildtransformationen

Der Server kann jedes hochgeladene Bild sofort mit URL-Parametern transformieren:

  • w - Breite
  • h - Höhe
  • f - Fit-Modus (cover, contain, fill, inside, outside)
  • grey - Graustufenintensität
  • invert=1 - Farben invertieren
  • blur - Gaußscher Weichzeichner
  • q - Qualitätsstufe

Beispielanfrage:

/company/image.webp?w=400&h=400&f=cover&grey=1&q=90

Automatisches Caching-System

Jede eindeutige Transformation wird gespeichert in:

/uploads/company/cache/

Beim nächsten Abruf der gleichen Parameter liefert der Server sofort die gecachte Datei:

Cache-Control: public, max-age=31536000, immutable

Dies macht den Server sehr schnell, selbst bei großen Bildern oder komplexen Transformationen.

Concurrency-Sicherheit

Das System verwendet eine in-memory Promise-Map, um parallele Anfragen an dieselbe Transformation zu verhindern:

const generating = new Map();

Dies gewährleistet:

  • Keine doppelte CPU-Belastung
  • Keine beschädigten Cache-Dateien
  • Keine Race Conditions

Ordnerstruktur

/uploads
  /companyName
    original-image.png
    image-12345.jpg
    /cache
      transformed-image.webp

Anwendungsfälle

  • Profilbilder
  • CMS-Systeme
  • Dashboard Uploads
  • Portfolio Bildhosting
  • Multi-Tenant SaaS Anwendungen

Fazit

Dieser Upload-Server ist leicht, skalierbar, sicher und einfach in Frontend- oder Backend-Anwendungen zu integrieren. Er ersetzt Drittanbieter-Services wie Cloudinary für Projekte, die volle Kontrolle, niedrigere Kosten oder individuelle Logik wünschen.

Zusammenarbeit mit mir

Wenn Sie einen ähnlichen maßgeschneiderten Image Upload Server benötigen oder diesen in Ihr System integrieren möchten, kann ich ihn für Sie entwickeln oder anpassen.

Kontaktieren Sie mich über mein Kontaktformular