---
title: "POST /v1/admin/uploads/presign"
method: POST
path: "/v1/admin/uploads/presign"
tags: ["AdminUploadService"]
---

# POST /v1/admin/uploads/presign

`POST /v1/admin/uploads/presign`

CreateUploadPresign 生成 Banner 图片的 presigned PUT 直传地址与永久公开 URL。

## Request body

- AdminUploadsV1CreateUploadPresignRequest
  - `contentType` string — content_type 图片 MIME（白名单 image/png|jpeg|webp|gif|svg+xml，且须与扩展名配对）。 该 MIME 会连同 size 一起进签名：PUT 时必须原样携带（见 required_headers）， 声明 image/png 就只能传 image/png，不能借此往公共读桶塞 HTML/JS。
  - `filename` string — filename 原始文件名（服务端只取扩展名，名字本体不进 key；拒绝含 / \ 或路径穿越）。
  - `scene` string — scene 上传场景（白名单校验，决定 key 前缀）：banner | entry_slot。 每个 RPC 只接受与其权限对应的场景，不能跨场景复用签名能力。
  - `size` string — size 文件字节数，必须为正且不超过 5 MiB。 之所以是必填而非可选提示：aws-sdk-go-v2 仅在 ContentLength 非空时才把 Content-Type 纳入 SigV4 SignedHeaders，不给 size 就等于没绑定类型。上传实体大小必须与此完全一致， 否则对象存储拒绝该 PUT。

## Response `200`

OK

- AdminUploadsV1CreateUploadPresignReply
  - `expiresAt` string — expires_at upload_url 失效时间（RFC3339；不影响 public_url）。
  - `key` string — key 对象 key（排障 / 日志用，前端正常流程不消费）。
  - `publicUrl` string — public_url 永久公开访问地址（PUT 成功后即可访问；前端最终提交给业务接口的就是它）。
  - `requiredHeaders` object — required_headers PUT 时必须原样携带的签名头（含 If-None-Match: * 防覆盖， 以及绑定了对象类型的 Content-Type）；不包含由浏览器 / HTTP 客户端根据 upload_url 与请求实体自动管理的 Host 和 Content-Length。
  - `uploadUrl` string — upload_url presigned PUT 地址（前端直传对象存储用），15 分钟有效。

---

[API](https://skmtc.dev/apiqik/apis/apiqik-api.md) · [All operations](https://skmtc.dev/apiqik/apis/apiqik-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/apiqik/apiqik-api/revisions/e06b96127408/schema)
