# 批量申请预签名上传地址

预留云存储记录并获取预签名上传 URL。
- **前置条件**：团队必须已有云存储记录且未过期。每个文件基础名限 60 字符，且必须在本次请求内以及与团队现有全部文件之间唯一——**比对时不含扩展名**，因此 `a.png` 会与已存在的 `a.mp4` 冲突。
- **限制**：全团队最多同时存在 100 个未确认的上传。
- **副作用**：为每个文件名插入一条上传中状态、大小为 0 的记录，并各返回 `{id, fileName, presignedUrl}`。
- **容量**：**这一步不校验空间。** 空间在确认上传时才扣减，因此 init 成功后 complete 仍可能因空间不足失败。
- **完成信号**：同步。**每个预签名 URL 有效期为 1 小时**；把文件字节 `PUT` 上去，然后调用 `/cloudstorage/upload/complete`。

已记录的业务错误码：`39001`, `39037`, `39044`, `39045`, `39047`, `39050`, `39051`。 各错误码的含义见 [Error Codes](../Getting%20Started/error-codes.md)。任何接口还可能返回通用错误码。

Endpoint: POST /api/cloudstorage/upload/init
Version: 2026-09-05

## Request fields (application/json):

  - `fileNames` (array, required)
    待上传的文件名列表（含扩展名），如 photo.jpg、video.mp4。
    Example: ["photo.jpg","video.mp4"]

## Response 200 fields (application/json):

  - `code` (integer, required)
    返回结果码。`0` 表示成功；其他值表示异常。
    Example: 0

  - `msg` (string | null, required)
    错误信息。
    Example: null

  - `requestId` (string)
    操作请求 ID。请求经过 API 网关时可能返回该字段。
    Example: 1d4f3ea968664593860b94b35d4ebf5e

  - `data` (array, required)

  - `data.id` (string)
    云存储文件 ID。
    Example: 1800000000000001

  - `data.fileName` (string)
    文件名（含扩展名）。
    Example: photo.jpg

  - `data.presignedUrl` (string)
    S3 预签名上传地址。使用 HTTPS PUT 上传文件内容。
    Example: https://example.com/presigned-upload-url

