Salta ai contenuti

API: Allegati

Gli allegati usano un caricamento in tre fasi, content-addressed: registri il file con il suo checksum SHA-256, carichi i byte su un URL presigned e poi confermi. Se lo spazio di lavoro contiene già un contenuto identico, la fase di caricamento viene saltata del tutto.

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

checksum è l’esadecimale SHA-256 in minuscolo del contenuto del file. Restituisce 201:

{
"id": "019f…",
"uploadUrl": "https://…storage…?X-Amz-Signature=…"
}
  • uploadUrl è null quando lo spazio di lavoro contiene già questo contenuto — l’allegato è completo, salta i passaggi 2 e 3.
  • Errori: 409 se questo file è già allegato a questa attività, 413 se il limite di archiviazione dello spazio di lavoro verrebbe superato.

Fai un PUT del file grezzo su uploadUrl con lo stesso Content-Type che hai registrato:

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

L’URL è presigned e di breve durata; qui non viene inviato alcun token Todomino.

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

Restituisce 200 dopo che il server ha verificato la dimensione dell’oggetto archiviato. 400 se il caricamento non è mai arrivato.

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

Risponde 302 Found con un URL presigned di breve durata nell’header Location. Segui il redirect senza inoltrare il tuo header Authorization (la maggior parte dei client HTTP lo fa correttamente per impostazione predefinita).

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

Restituisce 204. Rimuove l’allegato dall’attività; il file archiviato viene eliminato solo quando nessun’altra attività fa riferimento allo stesso contenuto.