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.
1. Rejestracja przesyłania
Dział zatytułowany „1. Rejestracja przesyłania”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=…"}uploadUrljestnull, 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.
2. Przesłanie bajtów
Dział zatytułowany „2. Przesłanie bajtów”Wyślij surowy plik metodą PUT na uploadUrl z tym samym
Content-Type, który zarejestrowałeś:
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.
3. Potwierdzenie
Dział zatytułowany „3. Potwierdzenie”POST /api/workspaces/{workspaceId}/tasks/{taskId}/attachments/{attachmentId}/completeZwraca 200, gdy serwer zweryfikuje rozmiar zapisanego obiektu. 400,
jeśli przesyłanie nigdy nie dotarło.
Pobieranie
Dział zatytułowany „Pobieranie”GET /api/workspaces/{workspaceId}/tasks/{taskId}/attachments/{attachmentId}/downloadOdpowiada 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).
Usuwanie
Dział zatytułowany „Usuwanie”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.
