6 Min

Sichere Datei-Uploads in großem Maßstab: signierte URLs und Validierung

Sichere Datei-Uploads in großem Maßstab mit signierten URLs, strikten Typ- und Größenprüfungen, Malware-Scanning und Berechtigungsregeln, die bei wachsendem Traffic schnell bleiben.

Sichere Datei-Uploads in großem Maßstab: signierte URLs und Validierung

Was Uploads in großem Maßstab schwierig macht

Uploads wirken einfach, bis echte Nutzer kommen. Eine Person lädt ein Profilbild hoch. Dann laden zehntausend Leute gleichzeitig PDFs, Videos und Tabellen hoch. Plötzlich fühlt sich die App langsam an, die Speicher­kosten steigen und Support-Tickets häufen sich.

Gängige Fehlerbilder sind vorhersehbar. Upload-Seiten hängen oder time-outen, wenn dein Server versucht, die vollständigen Dateien zu verarbeiten statt das Object-Storage die Arbeit machen zu lassen. Berechtigungen driftet, sodass jemand eine Date­i-URL errät und etwas sieht, das er nicht sehen sollte. „Harmlos“ aussehende Dateien kommen mit Malware oder in kniffligen Formaten, die nachgelagerte Werkzeuge zum Absturz bringen. Und Logs sind unvollständig, sodass du nicht einfache Fragen beantworten kannst wie wer wann was hochgeladen hat.

Stattdessen willst du etwas langweilig Zuverlässiges: schnelle Uploads, klare Regeln (erlaubte Typen und Größen) und eine Prüfspur, die Vorfälle einfach nachvollziehbar macht.

Der härteste Kompromiss ist Geschwindigkeit vs. Sicherheit. Wenn du jeden Check ausführst, bevor der Nutzer fertig ist, wartet er und wiederholt, was die Last erhöht. Schiebst du Prüfungen zu weit nach hinten, können unsichere oder unautorisierte Dateien sich verbreiten, bevor du sie entdeckst. Ein praktischer Ansatz ist, Upload und Prüfungen zu trennen und jeden Schritt schnell und messbar zu halten.

Sei außerdem konkret bei „Skalierung“. Schreibe deine Zahlen auf: Dateien pro Tag, Spitzen-Uploads pro Minute, maximale Dateigröße und wo deine Nutzer sitzen. Regionen sind wichtig für Latenz und Datenschutzregeln.

Wenn du eine App auf einer Plattform wie Koder.ai baust, hilft es, diese Limits früh festzulegen, weil sie formen, wie du Berechtigungen, Storage und den Hintergrund-Scan-Workflow designst.

Ein einfaches Bedrohungsmodell für Uploads

Bevor du Werkzeuge auswählst, mache dir klar, was schiefgehen kann. Ein Bedrohungsmodell muss kein großes Dokument sein. Es ist ein kurzes, gemeinsames Verständnis dessen, was du verhindern musst, was du später entdecken kannst und welche Kompromisse du akzeptierst.

Angreifer versuchen meist an vorhersehbaren Punkten reinzukommen: beim Client (Metadaten ändern oder MIME-Typ fälschen), am Netzwerk-Edge (Replays und Rate-Limit-Missbrauch), im Storage (Objektnamen erraten, überschreiben) und beim Download/Preview (riskantes Rendern auslösen oder Dateien via geteiltem Zugriff stehlen).

Ab da mappe Bedrohungen auf einfache Kontrollen:

Übergroße Dateien sind die einfachste Form von Missbrauch. Sie treiben Kosten und verlangsamen echte Nutzer. Stoppe sie früh mit harten Byte-Limits und schneller Ablehnung.

Gefälschte Dateitypen kommen als Nächstes. Eine Datei namens invoice.pdf kann etwas anderes sein. Vertraue nicht auf Erweiterungen oder UI-Checks. Verifiziere anhand der echten Bytes nach dem Upload.

Malware ist anders. In der Regel kannst du nicht alles scannen, bevor der Upload abgeschlossen ist, ohne das Erlebnis zu verschlechtern. Das übliche Muster ist asynchrone Erkennung, Quarantäne verdächtiger Elemente und Sperre des Zugriffs bis der Scan bestanden ist.

Unbefugter Zugriff ist oft der schädlichste Fall. Behandle jeden Upload und jeden Download als Berechtigungsentscheidung. Ein Nutzer sollte nur in einen Ort hochladen können, den er besitzt (oder in den er schreiben darf), und nur Dateien herunterladen können, die er sehen darf.

Für viele Apps ist eine solide v1-Policy:

  • Erzwinge Maximalgröße und erlaubte Kategorien (Bilder, PDFs usw.)
  • Verifiziere den echten Dateityp serverseitig nach dem Upload
  • Scanne asynchron und quarantänisiere bis sauber
  • Erfordere explizite Autorisierung für Upload und Download
  • Logge und alarmiere bei wiederholten Fehlern (Größe, Typ, Auth)

Eine praktische Upload-Architektur, die schnell bleibt

Der schnellste Weg, Uploads zu handhaben, ist, deinen App-Server aus dem „Bytes‑Geschäft“ herauszuhalten. Statt jede Datei durch dein Backend zu schicken, lass den Client direkt ins Object-Storage hochladen – mit einer kurzlebigen signierten URL. Dein Backend bleibt bei Entscheidungen und Aufzeichnungen, nicht beim Schieben von Gigabytes.

Die Aufteilung ist einfach: Das Backend beantwortet „wer darf was und wo hochladen“, während Storage die Dateidaten empfängt. Das beseitigt einen häufigen Engpass: App-Server, die doppelte Arbeit (Auth plus Proxy der Datei) machen und unter Last CPU, Speicher oder Netzwerk auslasten.

Die minimalen Bausteine

Halte einen kleinen Upload-Record in deiner Datenbank (z. B. PostgreSQL), sodass jede Datei einen klaren Besitzer und Lebenszyklus hat. Erstelle diesen Record, bevor der Upload beginnt, und aktualisiere ihn, wenn Ereignisse passieren.

Felder, die sich meist lohnen: Owner- und Tenant/Workspace-IDs, der Storage-Objekt-Key, ein Status, gemeldete Größe und MIME-Typ, sowie eine Checksumme, die du später verifizieren kannst.

Upload-Zustände im Voraus planen

Behandle Uploads wie eine Zustandsmaschine, damit Berechtigungsprüfungen korrekt bleiben, selbst wenn Retries auftreten.

Ein praktisches Set an Zuständen ist:

  • requested
  • uploaded
  • scanned
  • approved
  • rejected

Erlaube dem Client die signierte URL nur, nachdem das Backend einen requested-Record angelegt hat. Nachdem Storage den Upload bestätigt, wechsle zu uploaded, starte das Malware-Scanning im Hintergrund und mache die Datei erst verfügbar, wenn sie approved ist.

Schritt für Schritt: signierte URL-Uploads ohne Engpässe

Start: Nutzer klickt auf Upload. Deine App ruft das Backend auf, um einen Upload zu starten, mit Details wie Dateiname, Dateigröße und beabsichtigter Verwendung (Avatar, Rechnung, Anhang). Das Backend prüft die Berechtigung für dieses Ziel, erstellt einen Upload-Record und gibt eine kurzlebige signierte URL zurück.

Die signierte URL sollte eng gefasst sein. Idealerweise erlaubt sie nur einen einzigen Upload zu einem genauen Objekt-Key, mit kurzer Ablaufzeit und klaren Bedingungen (Größenlimit, erlaubter Content-Type, optional Checksumme).

Der Browser lädt direkt mit dieser URL in Storage hoch. Wenn der Upload fertig ist, ruft der Browser das Backend erneut auf, um zu finalisieren. Beim Finalize überprüfe die Berechtigung erneut (Zugriffe können entzogen werden) und verifiziere, was tatsächlich in Storage gelandet ist: Größe, erkannter Content-Type und Checksumme falls genutzt. Mach Finalize idempotent, damit Retries keine Duplikate erzeugen.

Dann markiere den Record als uploaded und trigger das Scanning im Hintergrund (Queue/Job). Die UI kann während des Scans „Verarbeitung“ anzeigen.

Vertrauenswürdige Typ- und Größenvalidierung

Signierte URL-Uploads bauen
Beschreibe deinen Ablauf und lass Koder.ai die Endpunkte und UI erzeugen.

Was zu prüfen ist und wo

Auf Erweiterungen zu vertrauen ist, wie invoice.pdf.exe in deinen Bucket gelangt. Behandle Validierung als wiederholbare Reihe von Checks, die an mehr als einem Ort stattfinden.

Beginne mit Größenlimits. Setze das maximale Byte-Limit in die signierte URL-Policy (oder pre-signed POST-Bedingungen), damit Storage übergroße Uploads früh ablehnen kann. Erzwinge dasselbe Limit erneut, wenn dein Backend Metadaten aufnimmt, weil Clients die UI umgehen könnten.

Typ-Prüfungen sollten auf Inhalt basieren, nicht auf dem Dateinamen. Untersuche die ersten Bytes der Datei (Magic-Bytes), um zu bestätigen, dass sie zu dem passt, was du erwartest. Ein echtes PDF beginnt mit %PDF, PNG-Dateien beginnen mit einer festen Signatur. Wenn der Inhalt nicht zu deiner Allowlist passt, lehne ab, auch wenn die Erweiterung korrekt aussieht.

Halte Allowlists spezifisch für jede Funktion. Ein Avatar-Upload darf vielleicht nur JPEG und PNG erlauben. Ein Dokumenten-Feature lässt PDF und DOCX zu. Das reduziert Risiken und macht Regeln leichter erklärbar.

Checksummen und Dateinamen

Vertraue niemals dem ursprünglichen Dateinamen als Storage-Key. Normalisiere ihn für die Anzeige (sonderbare Zeichen entfernen, Länge begrenzen), aber speichere deinen eigenen sicheren Objekt-Key, z. B. eine UUID plus eine von dir vergebene Extension nach der Typ-Erkennung.

Speichere eine Checksumme (z. B. SHA-256) in der Datenbank und vergleiche sie später während Verarbeitung oder Scan. Das hilft, Korruption, partielle Uploads oder Manipulation zu erkennen, besonders wenn Uploads unter Last wiederholt werden.

Malware-Scanning, das Nutzer nicht warten lässt

Malware-Scanning ist wichtig, sollte aber nicht im kritischen Pfad liegen. Akzeptiere den Upload schnell und behandle die Datei als blockiert, bis sie einen Scan besteht.

Das asynchrone Muster

Erstelle einen Upload-Record mit einem Status wie pending_scan. Die UI kann die Datei anzeigen, aber sie darf noch nicht nutzbar sein.

Scans werden typischerweise durch ein Storage-Ereignis ausgelöst, wenn das Objekt erstellt wird, durch Publizieren eines Jobs in eine Queue direkt nach Upload-Abschluss, oder durch beides (Queue plus Storage-Ereignis als Rückversicherung).

Der Scan-Worker lädt das Objekt herunter oder streamt es, führt Scanner aus und schreibt das Ergebnis zurück in die Datenbank. Bewahre die wesentlichen Informationen: Scan-Status, Scanner-Version, Zeitstempel und wer den Upload angefordert hat. Diese Audit-Spur macht den Support deutlich einfacher, wenn jemand fragt: „Warum wurde meine Datei blockiert?"

Was passiert, wenn eine Datei fehlschlägt

Lasse fehlgeschlagene Dateien nicht mit sauberen vermischt. Wähle eine Richtlinie und wende sie konsequent an: quarantänisieren und Zugriff entfernen, oder löschen, wenn du sie nicht zur Untersuchung brauchst.

Was auch immer du wählst, formuliere die Nutzerkommunikation ruhig und konkret. Erkläre, was passiert ist und was als Nächstes zu tun ist (neu hochladen, Support kontaktieren). Alarmiere dein Team, wenn viele Fehler in kurzer Zeit auftreten.

Wichtig: Setze eine strikte Regel für Downloads und Previews: Nur Dateien mit approved dürfen ausgeliefert werden. Alles andere gibt eine sichere Antwort wie „Datei wird noch geprüft.“

Berechtigungsprüfungen, die unter Last korrekt bleiben

Schnelle Uploads sind toll, aber wenn die falsche Person eine Datei an das falsche Workspace anhängt, ist das schlimmer als langsame Anfragen. Die einfachste Regel ist auch die stärkste: Jeder Dateirecord gehört exakt zu einem Tenant (Workspace/Org/Projekt) und hat einen klaren Owner oder Ersteller.

Führe Berechtigungsprüfungen doppelt aus: beim Ausstellen der signierten Upload-URL und erneut, wenn jemand die Datei herunterladen oder ansehen will. Die erste Prüfung stoppt unautorisierte Uploads. Die zweite schützt dich, wenn Zugriff entzogen wird, eine URL leakt oder die Rolle eines Nutzers sich nach dem Upload ändert.

Least-Privilege macht sowohl Sicherheit als auch Performance vorhersehbar. Anstatt einer breiten „files“-Berechtigung trenne Rollen wie „can upload“, „can view“ und „can manage (delete/share)“. Viele Anfragen werden so zu schnellen Lookups (Nutzer, Tenant, Aktion) statt zu teurer benutzerdefinierter Logik.

Vermeide ID-Ratenraten durch sequentielle Datei-IDs in URLs und APIs. Nutze opake Kennungen und mache Storage-Keys nicht erratbar. Signierte URLs sind Transport, nicht dein Berechtigungssystem.

Geteilte Dateien machen Systeme oft langsam und unübersichtlich. Behandle Sharing als explizite Daten, nicht als impliziten Zugriff. Ein einfacher Ansatz ist ein separates Sharing-Record, das einem Nutzer oder einer Gruppe Berechtigung zu einer Datei gewährt, optional mit Ablaufdatum.

Uploads schnell halten, wenn Traffic und Dateigröße wachsen

Von Checkliste zu Implementierung
Verwandle deine Upload-Checklist in einen konkreten Plan und Bausteine in Koder.ai.

Wenn über skalierende sichere Uploads gesprochen wird, konzentrieren sich viele auf Sicherheitsprüfungen und vergessen die Basics: Bytes bewegen ist der langsame Teil. Ziel ist, großen Datei-Traffic von deinen App-Servern fernzuhalten, Retries unter Kontrolle zu halten und zu vermeiden, dass Sicherheitsprüfungen zu einer ungebremsten Queue werden.

Große Dateien vorhersehbar machen

Bei großen Dateien nutze Multipart- oder Chunked-Uploads, damit eine instabile Verbindung Nutzer nicht zum Neustart zwingt. Chunks helfen außerdem, klarere Limits durchzusetzen: maximale Gesamtgröße, maximale Chunk-Größe und maximale Upload-Zeit.

Setze Client-Timeouts und Retries bewusst. Einige Retries retten echte Nutzer; unbegrenzte Retries können Kosten explodieren lassen, besonders auf mobilen Netzen. Ziel: kurze Timeouts pro Chunk, kleine Retry-Grenze und harte Deadline für den ganzen Upload.

Die „create upload“-Phase kontrollieren

Signierte URLs halten den schweren Datenpfad schnell, aber die Anfrage zum Erstellen derselben ist weiterhin ein Hotspot. Schütze sie, damit sie responsiv bleibt:

  • Rate-Limite „create upload“ pro Nutzer und pro IP
  • Erzwinge Größenlimits, bevor du die signierte URL ausstellst
  • Kürze TTLs, damit ungenutzte URLs schnell verfallen
  • Verfolge In-Progress-Uploads, sodass ein Nutzer nicht hunderte gleichzeitig startet
  • Nutze Idempotency-Keys, damit Refreshes keine doppelten Uploads erzeugen

Latenz hängt auch von der Geographie ab. Platziere App, Storage und Scan-Worker möglichst in derselben Region. Wenn länderspezifisches Hosting aus Compliance-Gründen nötig ist, plane das Routing früh, damit Uploads nicht über Kontinente springen. Plattformen, die global auf AWS laufen (wie Koder.ai), können Workloads näher an Nutzer bringen, wenn Datenresidenz wichtig ist.

Plane schließlich auch Downloads, nicht nur Uploads. Serviere Dateien mit signierten Download-URLs und setze Caching-Regeln nach Dateityp und Datenschutzlevel. Öffentliche Assets können länger im Cache bleiben; private Belege sollten kurzlebig und autorisierungsgeprüft sein.

Beispiel-Szenario: Rechnungen und Belege in einer Multi-User-App

Stell dir eine kleine Business-App vor, in der Mitarbeiter Rechnungen und Fotos von Belegen hochladen und ein Manager sie zur Erstattung freigibt. Hier hört Design auf akademisch zu sein: Viele Nutzer, große Bilder und echtes Geld sind im Spiel.

Ein guter Ablauf nutzt klare Status, sodass alle wissen, was passiert, und du die langweiligen Teile automatisieren kannst: Die Datei landet in Object Storage und du speicherst einen Record, der an Nutzer/Workspace/Expense gebunden ist; ein Hintergrundjob scannt die Datei und extrahiert Basis-Metadaten (wie echten MIME-Typ); dann wird der Eintrag entweder genehmigt und in Reports nutzbar, oder abgelehnt und blockiert.

Nutzer brauchen schnelles, konkretes Feedback. Ist die Datei zu groß, zeige Limit und aktuelle Größe (z. B.: „Datei ist 18 MB. Max ist 10 MB.“). Ist der Typ falsch, sage, was erlaubt ist („Lade ein PDF, JPG oder PNG hoch“). Scheitert der Scan, bleibe ruhig und handlungsorientiert („Diese Datei könnte unsicher sein. Bitte lade eine neue Kopie hoch.“).

Support-Teams brauchen eine Spur, die ohne Öffnen der Datei debuggt: Upload-ID, Nutzer-ID, Workspace-ID, Zeitstempel für created/uploaded/scan started/scan finished, Ergebniscodes (zu groß, Typ stimmt nicht, Scan fehlgeschlagen, Berechtigung verweigert), plus Storage-Key und Checksumme.

Re-Uploads und Ersetzungen sind üblich. Behandle sie als neue Uploads, verknüpfe sie mit derselben Ausgabestelle als neue Version, behalte die Historie (wer ersetzt hat und wann) und markiere nur die neueste Version als aktiv. Wenn du diese App auf Koder.ai baust, lässt sich das sauber auf eine uploads-Tabelle plus eine expense_attachments-Tabelle mit einem Versions-Feld abbilden.

Häufige Fehler und einfache Fixes

Quellcode jederzeit exportieren
Nimm deinen React-, Go- und PostgreSQL-Code mit, wenn du bereit bist.

Die meisten Upload-Bugs sind keine fancy Hacks. Es sind kleine Abkürzungen, die bei wachsendem Traffic in echtes Risiko umschlagen.

Die fünf Fehler, die am häufigsten vorkommen

  • Nur auf clientseitige Checks vertrauen. Fix: serverseitig erneut anhand echter Bytes (Magic-Bytes) validieren und Größenlimits über Storage-Metadaten durchsetzen, nicht nur über den Browserbericht.
  • Signierte URLs zu lange leben lassen. Fix: kurz halten (Minuten), single-purpose und auf einen Objekt-Key scope­en. Credentials rotieren und jede Ausstellung loggen.
  • Dateien downloadbar machen bevor der Scan fertig ist. Fix: in Quarantäne hochladen, asynchron scannen und erst nach sauberem Ergebnis promoten/serven.
  • User‑bereitgestellte Namen oder Pfade als Storage-Key nutzen. Fix: eigene Objekt-Keys (UUIDs) generieren und den Originalnamen normalisiert als Anzeigemeta speichern.
  • Berechtigungsprüfungen beim Download überspringen. Fix: Download als eigene Entscheidung behandeln und bei jeder Ausgabe Ownership, Workspace-Mitgliedschaft und Sharing-Regeln erneut prüfen.

Einfache Fixes, die Engpässe verhindern

Mehr Checks müssen Uploads nicht langsam machen. Trenne den schnellen Pfad vom schweren Pfad.

Führe schnelle Checks synchron aus (Auth, Größe, erlaubter Typ, Rate-Limits), und übergebe Scanning sowie tiefere Inspektionen an einen Hintergrund-Worker. Nutzer können weiterarbeiten, während die Datei von „uploaded“ zu „ready“ wandert. Wenn du mit einem chat-basierten Builder wie Koder.ai arbeitest, gilt dasselbe: Mach den Upload-Endpunkt klein und strikt, und schiebe Scans und Post‑Processing in Jobs.

Schnelle Checkliste und nächste Schritte

Bevor du Uploads auslieferst, definiere, was „für v1 sicher genug“ bedeutet. Teams geraten oft in Schwierigkeiten, weil sie strikte Regeln (die echte Nutzer blockieren) mit fehlenden Regeln (die Missbrauch einladen) mischen. Fang klein an, aber sorge dafür, dass jeder Upload einen klaren Pfad von „received“ bis „allowed to download“ hat.

Eine enge Pre‑Launch-Checkliste:

  • Erzwinge ein hartes Größenlimit früh (bevor Storage-Kosten wachsen)
  • Nutze eine Allowlist für Dateitypen, validiert durch Inhalt (Magic-Bytes), nicht nur durch Dateiname
  • Gate Zugriff per Scan: serviere Dateien nicht an andere, bevor der Scan fertig ist
  • Erfordere bei jedem Download Autorisierungsprüfungen
  • Halte Audit-Logs für Upload, Scan-Ergebnis und Download‑Versuche

Wenn du eine minimale Policy brauchst: halte es simpel: Größenlimit, enge Typ-Allowlist, signierter URL-Upload und „Quarantäne bis Scan besteht“. Füge später nett wirkende Features hinzu (Previews, mehr Typen, Hintergrund-Reprocessing), sobald der Kernpfad stabil ist.

Monitoring verhindert, dass „schnell“ beim Wachsen zu „unerklärlich langsam“ wird. Tracke Upload-Fehlerrate (Client vs Server/Storage), Scan-Fehlerrate und Scan-Latenz, durchschnittliche Upload-Zeit nach Dateigrößen-Buckets, Autorisierungs-Verweigerungen beim Download und Storage-Egress-Muster.

Führe einen kleinen Lasttest mit realistischen Dateigrößen und realen Netzwerken durch (mobiles Netz verhält sich anders als Office‑WLAN). Behebe Timeouts und Retries vor dem Launch.

Wenn du das in Koder.ai (koder.ai) umsetzt, ist Planning Mode ein praktischer Ort, um Upload-Zustände und Endpunkte zuerst zu skizzieren und dann Backend und UI um diesen Flow herum zu generieren. Snapshots und Rollback helfen zudem, Limits oder Scan-Regeln zu justieren.

FAQ

What’s the fastest way to handle uploads without overloading my backend?

Verwende direkte Uploads in ein Object-Storage mit kurzlebigen signierten URLs, damit deine App-Server keine Datei-Bytes streamen müssen. Das Backend bleibt für Autorisierung und Upload-Status zuständig, nicht fürs Verschieben von Gigabytes.

Do I really need to check permissions more than once?

Prüfe zweimal: einmal beim Erstellen des Uploads und Ausstellen der signierten URL, und nochmals beim Finalisieren sowie beim Servieren des Downloads. Signierte URLs sind nur ein Transportmittel; deine Anwendung braucht weiterhin Berechtigungsprüfungen, die an den Dateirecord und Tenant/Workspace gebunden sind.

What upload states should I track in my database?

Behandle Uploads als State-Maschine, damit Retries und Teilfehler keine Sicherheitslücken erzeugen. Ein üblicher Ablauf ist requested, uploaded, scanned, approved, rejected. Downloads nur erlauben, wenn approved gesetzt ist.

Where should I enforce max file size: client, backend, or storage?

Setze ein hartes Byte-Limit in die signierte URL-Policy (oder die pre-signed POST-Bedingungen), damit Storage übergroße Uploads früh ablehnt. Prüfe dasselbe Limit erneut beim Finalize anhand der von Storage gemeldeten Metadaten, damit Clients es nicht umgehen können.

How do I prevent fake file types like “invoice.pdf.exe”?

Vertraue nicht auf Dateiendungen oder den vom Browser gemeldeten MIME-Typ. Bestimme den Typ anhand der tatsächlichen Datei-Bytes nach dem Upload (z. B. Magic-Bytes) und vergleiche mit einer engen Allowlist.

How can I add malware scanning without making uploads feel slow?

Blockiere den Nutzer nicht während des Scans. Akzeptiere den Upload schnell, quarantänisiere die Datei, scanne sie im Hintergrund und erlauben erst Download/Preview, wenn ein sauberes Ergebnis vorliegt.

What should I do when a file fails scanning?

Wähle eine konsistente Richtlinie: quarantäne und Zugriff entfernen, oder löschen, wenn du die Datei nicht zur Untersuchung brauchst. Informiere den Nutzer ruhig und konkret und behalte Audit-Daten, damit der Support erklären kann, was passiert ist, ohne die Datei öffnen zu müssen.

How should I name files in storage to avoid guessing and collisions?

Nutze niemals den vom Nutzer gelieferten Dateinamen oder Pfad als Storage-Key. Generiere einen nicht erratbaren Objekt-Schlüssel (z. B. eine UUID) und speichere den Originalnamen normalisiert nur als Anzeigemeta.

How do I keep large uploads reliable on mobile or flaky networks?

Verwende Multipart- oder Chunked-Uploads, damit instabile Verbindungen nicht bei Null neu starten müssen. Begrenze Retries, setze absichtliche Timeouts und eine harte Deadline für den gesamten Upload.

What’s the minimum data I should log to debug upload issues later?

Speichere einen kleinen Upload-Record mit Owner, Tenant/Workspace, Objekt-Key, Status, Zeitstempeln, erkanntem Typ, Größe und ggf. Checksumme. Wenn du auf Koder.ai baust, passt das gut zu einem Go-Backend, PostgreSQL-Tabellen für Uploads und Hintergrundjobs für Scans.

Related posts