┌────┐ ┌───┐ ┌───┐ │user│ │API│ │AWS│ └──┬─┘ └─┬─┘ └─┬─┘ I want to upload a file in X chunks ┌┴┐ │ │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ > │ │ │ │ │ │ │ │ │ │create_multipart_upload(bucket, file)┌┴┐ │ │ │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ >│ │ │ │ │ └┬┘ │ │ │ UploadId │ │ │ │ <─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ │ │ │ │ │ │ │ ╔═══════╤══╪═╪══════════════════════════════════════╪═══════════╗ │ ║ LOOP │ For i in 1..X+1 │ ║ │ ╟───────┘ │ │ │ ║ │ ║ │ │ generate_presigned_url(UploadId, i) ┌┴┐ ║ │ ║ │ │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ >│ │ ║ │ ║ │ │ └┬┘ ║ │ ║ │ │ presigned URL │ ║ │ ║ │ │ <─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ║ │ ╚══════════╪═╪══════════════════════════════════════╪═══════════╝ │ └┬┘ │ │ [presigned_urls] │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│ │ │ │ │ . . . . . . . . . . . . │ │ │ ╔═══════╤════╪════════════════════════════════════╪═══════════════════════════════════════╪═══════════╗ ║ LOOP │ For u in presigned_urls │ │ ║ ╟───────┘ │ │ │ ║ ║ │ HTTP POST u ┌┴┐ ║ ║ │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─>│ │ ║ ║ │ │ └┬┘ ║ ║ │ PartId, ETag │ ║ ║ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│ ║ ╚════════════╪════════════════════════════════════╪═══════════════════════════════════════╪═══════════╝ │ │ │ . . . . . . . . . . . . │ Finished! [(PartId, Etag)] ┌┴┐ │ │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ > │ │ │ │ │ │ │ │ │ │ complete_multipart_upload(...) ┌┴┐ │ │ │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ >│ │ │ │ │ └┬┘ │ │ │ OK │ │ │ │ <─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ └┬┘ │ │ OK │ │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─│ │ ┌──┴─┐ ┌─┴─┐ ┌─┴─┐ │user│ │API│ │AWS│ └────┘ └───┘ └───┘