CodamAIDocs
Themafertig

Ersetzen und Umbenennen

Was ein Update mit und ohne neue Datei bewirkt: Inhalt ersetzen, nur umbenennen, oder beides.

Ausprägungen
mit neuer Datei → Inhalt ersetztohne Datei → Inhalt bleibtnur umbenennenumbenennen und ersetzenPUT und PATCHgleichzeitig → 409

Worum es geht

Ein Datei-Modell änderst du mit PUT oder PATCH, wie jedes Modell. Ob dabei auch der Inhalt ausgetauscht wird, hängt an einer Frage: Liegt der Anfrage eine Datei bei, deren Name zum Datei-Objekt passt?

Die vier Fälle

Update eines Datei-Modells
name geändert?passende Datei dabei?Ergebnis
neinneinnur eigene Felder geändert; Inhalt, Größe, Typ bleiben
janeinumbenannt; Inhalt, Größe und mimeType bleiben
neinjaInhalt ersetzt; fileSize, mimeType, fileVersion neu
jajaumbenannt und ersetzt; der Dateiteil muss den neuen Namen tragen

Inhalt ersetzen

Neue Fassung hochladen
Anfrage
PATCH /api/rest/fileasset/update/f1…/upload
data:  { "data": { "id": "f1…", "name": "Vertrag.pdf" },
         "response": ["id", "name", "fileSize", "fileVersion"] }
files: Vertrag.pdf   (neue Fassung)
Antwort
{ "data": { "id": "f1…", "name": "Vertrag.pdf",
            "fileSize": 51877, "fileVersion": 1790000123456 },
  "meta": { "error": false } }

Die fileId bleibt gleich, der neue Inhalt liegt am selben Platz. Was mit dem alten Inhalt passiert, entscheidet das Auditing des Modells:

Der alte Inhalt
Auditiertes Modell
  • der alte Inhalt bleibt als Version erhalten
  • über einen Rollback wieder herstellbar
  • siehe Dateiversionen
Nicht auditiertes Modell
  • der alte Inhalt wird überschrieben
  • über CDMS nicht wiederherstellbar

Nur umbenennen

Umbenennen ohne neue Datei
Anfrage
PATCH /api/rest/fileasset/update/f1…
{ "data": { "id": "f1…", "name": "Rahmenvertrag 2026.pdf" },
  "response": ["id", "name", "mimeType"] }
Antwort
{ "data": { "id": "f1…", "name": "Rahmenvertrag 2026.pdf",
            "mimeType": "application/pdf" },
  "meta": { "error": false } }

Der Inhalt liegt unter der fileId, nicht unter dem Namen. Umbenennen ändert deshalb nur eine Spalte in der Datenbank. mimeType bleibt dabei, wie er beim letzten Upload bestimmt wurde, auch wenn die neue Endung etwas anderes nahelegt.

PUT und PATCH

Welches Verb?

Wann: PATCH /update/{id} oder /update/{id}/upload

Du schickst nur, was sich ändert. Ohne name im Patch gilt der gespeicherte Name, und eine Datei muss dann diesen Namen tragen. Mit neuem name muss die Datei den neuen Namen tragen.

Ergebnis: Für Dateien meist die beste Wahl: umbenennen, ersetzen oder beides, ohne die übrigen Felder zu kennen.

Wann: PUT /update/{id} oder /update/{id}/upload

Wie bei jedem PUT ersetzt du den ganzen Datensatz. Schicke deshalb name und alle eigenen Felder mit. Die Datei muss den name aus der Anfrage tragen. Ohne Datei bleibt der Inhalt.

Ergebnis: Siehe Ersetzen mit PUT.

Statt Multipart kannst du den neuen Inhalt auch als Base64 im Feld content schicken. Siehe Hochladen.

Gleichzeitig ersetzen

Zwei Anfragen, die gleichzeitig einen neuen Inhalt für denselben Datensatz hochladen, würden sich im Speicher gegenseitig überschreiben. Deshalb sperrt CDMS den Datensatz, bevor es den Inhalt schreibt. Die zweite Anfrage bekommt 409. Lies den Datensatz dann neu und lade erneut hoch. Siehe Gleichzeitige Änderungen.

Fallen

Wie es weitergeht

Quellen im Code und in der Wissensdatenbank
  • CDMS/cdms-system-layer – AbstractLayer.recursivePrepare (Update: fileId aus dem gespeicherten Datensatz, lockForUpdate, ohne Upload Dateifelder übernehmen), recursivePatch (Dateizweig: Name aus dem Patch, lockForUpdate)
  • CDMS/cdms-localfs-storage – LocalFSFileController.saveFile (retainCurrentContent, publish, applyStoredMetadata); docs/adr/ADR-014-path-is-the-file-id-alone.md
  • CDMS/cdms-integrationtest – AbstractFileRollbackTest (anUploadReplacesInsteadOfAddingAFile, Umbenennen)
Suchen