memos/server
boojack b3e67399b8 feat(attachment): upload files in resumable chunks
Add UploadAttachment, a unary RPC that accepts a file in bounded chunks
and streams it to a temp file instead of holding the whole blob in one
request body and in memory. A call carrying a spec starts an upload and
returns an opaque upload_id; later calls carry that id with
write_offset,
data, and finish_write, following the Cloud Storage WriteObject shape.
Retrying the last chunk after a lost response is idempotent, uploads are
bound to their owner, and they expire after 30 minutes of inactivity.

CreateAttachment and the chunked finalize now share one processing
pipeline for motion-photo detection, EXIF stripping, and storage. The
motion-photo detector works over an io.ReaderAt so large JPEGs are never
loaded whole, and the request body cap is a single per-procedure lookup.

The web editor uploads through the new RPC in 2 MiB chunks with bounded
concurrency under the server's per-user limit.
2026-09-08 21:07:06 +08:00
..
access feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
auth chore(go): upgrade to Go 1.27 (#6217) 2026-08-20 23:37:02 +08:00
notification feat(spaces): deliver invitations to the inbox (#6266) 2026-09-04 08:58:49 +08:00
router feat(attachment): upload files in resumable chunks 2026-09-08 21:07:06 +08:00
runner/memopayload fix(storage): proxy S3 attachments through authenticated routes (#6210) 2026-08-18 23:38:35 +08:00
test refactor(server): remove RSS feed support (#6243) 2026-08-28 23:06:25 +08:00
cors.go fix(cors): open API to any origin for token auth, keep cookies same-origin 2026-06-14 23:20:34 +08:00
cors_test.go fix(cors): open API to any origin for token auth, keep cookies same-origin 2026-06-14 23:20:34 +08:00
server.go feat(attachment): upload files in resumable chunks 2026-09-08 21:07:06 +08:00