Split out of #10 (§10). Verified on main at 19.0.0: there is no generate_presigned_*
anywhere in src/.
Browsers need to download blob-backed files directly. Proxying them through Lambda is not
viable — the synchronous response caps at 6 MB and base64 inflates by a third.
The identity half of this is already solved: #9 / 18.1.0 added ETags to head_blob and
BlobPlaceholder, and if_match= on get_blob. Presigned access is the remaining gap for
anything user-facing.
Worth deciding as part of the design:
- Download (
get_object) and upload (put_object) are separable; download is the
motivating case.
- Whether the presigned URL can be pinned to a specific ETag, so a URL minted against one
version of an overwritable key cannot silently serve a later one. get_blob already
takes if_match; the presigned equivalent should be considered alongside it.
LocalBlobStorage needs a parity story, or an explicit documented one — it has no
equivalent of a presigned URL, and tests that exercise this path will need something.
Split out of #10 (§10). Verified on
mainat 19.0.0: there is nogenerate_presigned_*anywhere in
src/.Browsers need to download blob-backed files directly. Proxying them through Lambda is not
viable — the synchronous response caps at 6 MB and base64 inflates by a third.
The identity half of this is already solved: #9 / 18.1.0 added ETags to
head_blobandBlobPlaceholder, andif_match=onget_blob. Presigned access is the remaining gap foranything user-facing.
Worth deciding as part of the design:
get_object) and upload (put_object) are separable; download is themotivating case.
version of an overwritable key cannot silently serve a later one.
get_blobalreadytakes
if_match; the presigned equivalent should be considered alongside it.LocalBlobStorageneeds a parity story, or an explicit documented one — it has noequivalent of a presigned URL, and tests that exercise this path will need something.