CodamAIDocs
Themafertig

Größengrenzen

Welche Größengrenzen für Uploads und Downloads gelten, was bei einer Überschreitung passiert und wo man sie einstellt.

Ausprägungen
Upload: 25 MB je Datei, 500 MB je Request, 500 Teilegleiche Grenzen für Multipart und Base64413 mit der Grenze im messageKeyEinstellung über Standard-PropertiesProxy und Ingress davorDownload: ganze Datei im Arbeitsspeicherharte Grenze 2 GiBkein Kontingent je Mandant

Worum es geht

Dateien können groß sein, und große Dateien kosten Speicher, Netz und Zeit. Es gibt drei Stellen, an denen die Größe zählt: beim Hochladen, beim Herunterladen und im Dateispeicher.

Die Grenzen im Überblick

WoGrenzeEinstellbar?
eine Datei (Multipart oder Base64)25 MBja, spring.servlet.multipart.max-file-size
alle Dateien eines Requests500 MBja, spring.servlet.multipart.max-request-size
Teile eines Multipart-Requests500ja, server.tomcat.max-part-count
Downloadganze Datei im Arbeitsspeicher, je laufendem Download–
Dateigröße insgesamt2 GiB, weil fileSize eine ganze Zahl bis 2³¹−1 istnein
Dateispeicher je Mandantkein Kontingent–

Die Werte sind so gewählt, dass ein Vorgang alle seine Dateien in einem Request schicken kann, zum Beispiel eine Begehung mit 100 Fotos zu je 5 MB. Ein Request wird ganz oder gar nicht gespeichert. Einzeln hochgeladene Dateien könnten nach einem Abbruch halb verteilt liegen bleiben.

Bei Base64 zählt die Größe der Datei, nicht die des Textes. CDMS rechnet sie aus der Länge des Textes aus, bevor es etwas dekodiert. Alle Base64-Dateien eines Requests zusammen dürfen höchstens so groß sein wie die Request-Grenze.

Was bei einer zu großen Datei passiert

Ein Upload über der Grenze
Was ist zu groß?WegAntwort
nichtsallewird gespeichert
eine DateiMultipart oder Base64413 file-too-large|<bytes>
alle Dateien zusammenMultipart oder Base64413 request-too-large|<bytes>
die Zahl der TeileMultipart413 too-many-parts|<anzahl>

Die Zahl hinter dem | ist die Grenze: in Bytes bei Dateien und Requests, als Anzahl bei den Teilen. file-too-large|26214400 heißt also „höchstens 25 MB je Datei“. In jedem dieser Fälle ist nichts gespeichert. Den Request unverändert zu wiederholen, scheitert genauso.

Nennt der Server keine Grenze, kommt 413 upload-too-large.

Die Grenzen einstellen

Die Voreinstellungen bringt CDMS selbst mit. Setzt deine Anwendung einen der Werte, gilt ihrer. In der application.yaml:

Uploads bis 50 MB je Datei, 1 GB je Request
Anfrage
spring:
  servlet:
    multipart:
      max-file-size: 50MB
      max-request-size: 1GB
server:
  tomcat:
    max-part-count: 1000
Oder als Umgebungsvariablen
SPRING_SERVLET_MULTIPART_MAX_FILE_SIZE=50MB
SPRING_SERVLET_MULTIPART_MAX_REQUEST_SIZE=1GB
SERVER_TOMCAT_MAX_PART_COUNT=1000

Die Request-Grenze muss mindestens so groß sein wie die Datei-Grenze, sonst greift sie zuerst. -1 heißt unbegrenzt.

Warum Downloads die eigentliche Grenze sind

Beim Herunterladen liest CDMS die ganze Datei in den Arbeitsspeicher und schickt sie dann. Der Bedarf ist also ungefähr:

gleichzeitige Downloads × Dateigröße

Zehn gleichzeitige Downloads einer 200-MB-Datei brauchen rund 2 GB Arbeitsspeicher, nur für die Dateien. Deshalb ist CDMS für Dateien bis etwa 25 MB ausgelegt: Dokumente, Bilder, Scans. Für Videos oder große Archive ist ein eigener Speicher besser geeignet, auf den CDMS nur verweist.

Fallen

Wie es weitergeht

Quellen im Code und in der Wissensdatenbank
  • CDMS/cdms-rest-api – UploadLimitDefaults (Voreinstellungen), UploadLimits, ClientErrorTranslator (413-Schlüssel), AbstractRestApi.addFilesFromBase64 (Base64-Grenzen), ObjectMapperConfig (Stringlänge), UploadLimitContainerTest, UploadLimitDefaultsTest
  • CDMS/cdms-localfs-storage – LocalFSFileController.getFile (readAllBytes), docs/adr/ADR-009, ADR-019 (gemessen ~5 MB, dokumentiertes Maximum 25 MB), docs/05-configuration.md (keine Quote)
  • CDMS/cdms-commons – FileInterface (fileSize Integer), FileUploadException (413)
  • documentation/10-cdms-grundlagen/04-konfiguration.md (Uploads), 05-api-guide/09-dateien.md
Suchen