Zog

Multipart uploads

Parallel part uploads for files larger than 100 MiB.

When sizeBytes is greater than 100 MiB, POST /api/v1/uploads returns a multipart session instead of a single uploadUrl.

Init response

{
  "ok": true,
  "data": {
    "multipart": true,
    "fileId": "…",
    "objectKey": "…",
    "uploadId": "…",
    "partSize": 10485760,
    "signPartUrl": "/api/v1/uploads/multipart/sign-part",
    "completeUrl": "/api/v1/uploads/multipart/complete"
  }
}

Part size is chosen per file (5 MiB to 1 GiB, targeting ~16 parts). Upload parts concurrently for best throughput.

Sign a part

POST /api/v1/uploads/multipart/sign-part
{
  "fileId": "…",
  "uploadId": "…",
  "partNumber": 1
}
{
  "ok": true,
  "data": {
    "fileId": "…",
    "uploadId": "…",
    "partNumber": 1,
    "partUrl": "https://…"
  }
}

PUT each part to its partUrl. Capture the returned ETag header for completion.

Complete multipart

POST /api/v1/uploads/multipart/complete
{
  "fileId": "…",
  "uploadId": "…",
  "parts": [
    { "ETag": "\"abc…\"", "PartNumber": 1 },
    { "ETag": "\"def…\"", "PartNumber": 2 }
  ]
}

Parts may be sent in any order; Zog sorts them before assembling the object.

Tips

  • Sign and upload parts concurrently for speed
  • Retry failed part PUTs with a fresh signed URL if needed
  • Call abort if you abandon a multipart session