
❌ This issue is not open for contribution. Visit Contributing guidelines to learn about the contributing process and how to find suitable issues.

Overview
Migrate the web frontend's upload paths from single-PUT to the opt-in GCS resumable scheme added in #5975, so interrupted uploads resume instead of restarting from byte 0.
Complexity: Medium
Target branch: unstable
Context
Two frontend sites single-PUT the whole file and skip upload when a HEAD on the storage URL returns 200:
shared/vuex/file/actions.js — uploadFileToStorage
shared/views/TipTapEditor/.../imageService.js — uploadFileToStorage
Once #5975 lands, upload_url (with resumable: true) returns either a definitive skip or a session URI — the client no longer needs the HEAD check.
The Change
- Pass
resumable: true to upload_url; upload to the returned session URI in chunks (256 KiB multiples), resuming from the last persisted offset on interruption.
- Apply to both upload sites.
- On a definitive skip from
upload_url, mark the file complete without uploading; remove the client HEAD-existence check.
Out of Scope
- Removing single-
PUT / cutover.
- ricecooker client.
Acceptance Criteria
References
AI usage
I used Claude (Opus 4.8) to draft this issue from the design established in #5975. I defined the scope and acceptance criteria, and verified the named upload paths against the current code.
❌ This issue is not open for contribution. Visit Contributing guidelines to learn about the contributing process and how to find suitable issues.
Overview
Migrate the web frontend's upload paths from single-
PUTto the opt-in GCS resumable scheme added in #5975, so interrupted uploads resume instead of restarting from byte 0.Complexity: Medium
Target branch: unstable
Context
Two frontend sites single-
PUTthe whole file and skip upload when aHEADon the storage URL returns 200:shared/vuex/file/actions.js—uploadFileToStorageshared/views/TipTapEditor/.../imageService.js—uploadFileToStorageOnce #5975 lands,
upload_url(withresumable: true) returns either a definitive skip or a session URI — the client no longer needs the HEAD check.The Change
resumable: truetoupload_url; upload to the returned session URI in chunks (256 KiB multiples), resuming from the last persisted offset on interruption.upload_url, mark the file complete without uploading; remove the client HEAD-existence check.Out of Scope
PUT/ cutover.Acceptance Criteria
resumable: trueand upload to the session URI in 256 KiB-multiple chunks.upload_url, the file is marked complete without uploading; the client HEAD check is removed.References
AI usage
I used Claude (Opus 4.8) to draft this issue from the design established in #5975. I defined the scope and acceptance criteria, and verified the named upload paths against the current code.