API: Anhänge
Anhänge verwenden einen dreistufigen, inhaltsadressierten Upload: Du registrierst die Datei mit ihrer SHA-256-Prüfsumme, lädst die Bytes zu einer vorsignierten URL hoch und bestätigst dann. Speichert der Arbeitsbereich bereits identischen Inhalt, entfällt der Upload-Schritt komplett.
1. Den Upload registrieren
Abschnitt betitelt „1. Den Upload registrieren“POST /api/workspaces/{workspaceId}/tasks/{taskId}/attachments{ "checksum": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", "fileName": "color-sample.jpg", "mediaType": "image/jpeg", "sizeBytes": 182734}checksum ist der SHA-256-Hex-Wert des Dateiinhalts in Kleinbuchstaben.
Liefert 201:
{ "id": "019f…", "uploadUrl": "https://…storage…?X-Amz-Signature=…"}uploadUrlistnull, wenn der Arbeitsbereich diesen Inhalt bereits speichert — der Anhang ist damit vollständig, überspringe Schritt 2 und 3.- Fehler:
409, wenn diese Datei bereits an diese Aufgabe angehängt ist,413, wenn das Speicherlimit des Arbeitsbereichs überschritten würde.
2. Die Bytes hochladen
Abschnitt betitelt „2. Die Bytes hochladen“Sende die rohe Datei per PUT an uploadUrl, mit demselben
Content-Type, den du registriert hast:
curl -X PUT --data-binary @color-sample.jpg \ -H "Content-Type: image/jpeg" "$UPLOAD_URL"Die URL ist vorsigniert und kurzlebig; hier wird kein Todomino-Token gesendet.
3. Abschließen
Abschnitt betitelt „3. Abschließen“POST /api/workspaces/{workspaceId}/tasks/{taskId}/attachments/{attachmentId}/completeLiefert 200, nachdem der Server die Größe des gespeicherten Objekts
geprüft hat. 400, wenn der Upload nie angekommen ist.
Herunterladen
Abschnitt betitelt „Herunterladen“GET /api/workspaces/{workspaceId}/tasks/{taskId}/attachments/{attachmentId}/downloadAntwortet mit 302 Found und einer kurzlebigen vorsignierten URL im
Location-Header. Folge der Weiterleitung, ohne deinen
Authorization-Header mitzusenden (die meisten HTTP-Clients machen das
standardmäßig richtig).
Löschen
Abschnitt betitelt „Löschen“DELETE /api/workspaces/{workspaceId}/tasks/{taskId}/attachments/{attachmentId}Liefert 204. Entfernt den Anhang von der Aufgabe; die gespeicherte Datei
wird erst gelöscht, wenn keine andere Aufgabe denselben Inhalt referenziert.
