# 确认上传完成

确认已上传的云存储文件。
- **前置条件**：文件记录必须属于你的团队，且对象必须已在存储中——服务端会读取其 ETag 与长度进行核验。大小必须大于 0 且小于 2 GB。
- **副作用**：原子地扣减团队存储容量，然后把记录标记为已上传并写入真实大小。在此成功之前，该文件**不会出现在 `/cloudstorage/file/page`**，并持续占用 100 个待确认槽位之一。
- **失败即删除已上传对象。** 过早调用、超出大小限制或空间不足，都会把字节从存储中删掉，并让记录停留在未确认状态。恢复方式是重新 `/cloudstorage/upload/init` 并重新上传，而不是重试本接口。
- **完成信号**：同步；一旦成功即幂等——再次调用会返回同一文件且不再扣减容量。
- **说明**：始终未确认的记录会在 24 小时后被自动清理。

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

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

## Request fields (application/json):

  - `id` (string, required)
    预签名上传地址接口返回的云存储文件 ID。
    Example: 1800000000000001

## Response 200 fields (application/json):

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

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

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

  - `data` (object, required)

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

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

  - `data.fileExt` (string)
    文件扩展名。
    Example: jpg

  - `data.fileSize` (string)
    文件大小，单位字节。
    Example: 204800

  - `data.fileType` (integer)
    文件类型：0 = 图片，1 = 视频，2 = 应用，3 = 音频，4 = 文档，5 = 其他。
    Example: 0

  - `data.tagInfo` (array)
    文件上的标签详情。

  - `data.tagInfo.id` (string)
    标签 ID。
    Example: 1800000000000101

  - `data.tagInfo.tagSource` (string)
    标签来源，如 ENV、PROXY。
    Example: ENV

  - `data.tagInfo.tagName` (string)
    标签名称。
    Example: Invoice

  - `data.tagInfo.tagType` (string)
    标签类型：TAG 或 GROUP。
    Example: TAG

  - `data.tagInfo.tagIcon` (string)
    标签图标。

  - `data.createDate` (string)
    上传时间。

  - `data.updateDate` (string)
    更新时间。

