Przejdź do głównej zawartości

API: Załączniki

Załączniki używają trzyetapowego przesyłania adresowanego treścią: rejestrujesz plik z jego sumą kontrolną SHA-256, przesyłasz bajty na presigned URL, a następnie potwierdzasz. Jeśli obszar roboczy przechowuje już identyczną zawartość, etap przesyłania jest całkowicie pomijany.

POST /api/workspaces/{workspaceId}/tasks/{taskId}/attachments
{
"checksum": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
"fileName": "color-sample.jpg",
"mediaType": "image/jpeg",
"sizeBytes": 182734
}

checksum to zapisany małymi literami szesnastkowy skrót SHA-256 zawartości pliku. Zwraca 201:

{
"id": "019f…",
"uploadUrl": "https://…storage…?X-Amz-Signature=…"
}
  • uploadUrl jest null, gdy obszar roboczy przechowuje już tę zawartość — załącznik jest kompletny, pomiń kroki 2 i 3.
  • Błędy: 409, jeśli ten plik jest już dołączony do tego zadania, 413, jeśli limit przestrzeni obszaru roboczego zostałby przekroczony.

Wyślij surowy plik metodą PUT na uploadUrl z tym samym Content-Type, który zarejestrowałeś:

Terminal window
curl -X PUT --data-binary @color-sample.jpg \
-H "Content-Type: image/jpeg" "$UPLOAD_URL"

URL jest podpisany (presigned) i krótkotrwały; nie wysyła się tu żadnego tokenu Todomino.

POST /api/workspaces/{workspaceId}/tasks/{taskId}/attachments/{attachmentId}/complete

Zwraca 200, gdy serwer zweryfikuje rozmiar zapisanego obiektu. 400, jeśli przesyłanie nigdy nie dotarło.

GET /api/workspaces/{workspaceId}/tasks/{taskId}/attachments/{attachmentId}/download

Odpowiada 302 Found z krótkotrwałym presigned URL w nagłówku Location. Podążaj za przekierowaniem bez przekazywania swojego nagłówka Authorization (większość klientów HTTP robi to domyślnie poprawnie).

DELETE /api/workspaces/{workspaceId}/tasks/{taskId}/attachments/{attachmentId}

Zwraca 204. Usuwa załącznik z zadania; zapisany plik jest usuwany dopiero wtedy, gdy żadne inne zadanie nie odwołuje się do tej samej zawartości.