一句話:presigned PUT 綁不住上傳內容(body 沒被簽),POST policy 用一份「條件文件」讓 S3 強制檢查大小、型別、key 前綴——是給不受信任前端直傳的更安全選擇。
回想 Level 5:presigned PUT 的 payload 是 UNSIGNED-PAYLOAD,body 沒被簽,所以拿到 URL 的人能傳任何內容、任何大小。想卡「只能傳 5MB 以下的 JPEG」,PUT 做不到——POST policy 就是補這個洞的。
multipart/form-data POST 到 S3。| 條件 | 作用 |
|---|---|
content-length-range | 檔案大小的下限/上限 |
Content-Type | 只允許某些型別(如 image/*) |
| key 前綴 | 只能傳進某個路徑(如 uploads/用戶ID/) |
| expiration | policy 的到期時間 |
presigned PUT:簡單、一條 URL 搞定,但內容不設限。
POST policy:要組 policy、稍複雜,但能卡大小/型別/路徑。
結論:讓「不受信任的前端」直傳,POST policy 通常更安全;內部可信、只圖方便,presigned PUT 就夠。