# 上传素材
> 用虚拟密钥直接上传图片、视频、音频到企业火山素材库,查询审核状态、列出和删除素材。
Base URL:`https://platform.sgt.site`
本页接口用于管理企业火山素材库中的素材。创建后查询审核状态,素材可用后再用于生成;鉴权与文件输入方式见[文件与素材约定](business-auth.md);与 `/media/v1/files` 的区别见[参考文件与素材:选择上传接口](media-files.md#media-files-h-cf1470ee)。
| 方法 | 路径 |
| --- | --- |
| POST | `/api/volcengine/assets/create` |
| POST | `/api/volcengine/assets/check` |
| POST | `/api/volcengine/assets/list` |
| POST | `/api/volcengine/assets/delete` |
## 创建素材
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `file` / `base64` / `url` | — | 文件内容,三选一,见[文件输入](business-auth.md#business-auth-section-2) |
| `content_type` | string | 仅配合纯 Base64 使用,声明 MIME |
| `asset_type` | string | `Image`、`Video`、`Audio`(不区分大小写)。文件和 Base64 可省略,按内容识别;填写时须与实际类型一致。**用 URL 上传视频或音频时必须填写**,否则按 Image 处理 |
| `name` | string | 素材名称,1–64 个字符;省略时自动生成 |
| `group_id` | string | 本企业已有的素材组 ID;省略时使用企业默认素材组(首次自动创建) |
| `wait_seconds` | integer | 创建后等待审核结果的秒数,0–30,默认 30;不含上传耗时 |
表单上传时,`name`、`group_id`、`asset_type`、`wait_seconds` 作为普通文本字段提交。
Base64 上传图片:
```http
POST /api/volcengine/assets/create HTTP/1.1
Host: platform.sgt.site
Authorization: Bearer YOUR_VIRTUAL_KEY
Content-Type: application/json
```
```json
{
"base64": "data:image/png;base64,BASE64_IMAGE_DATA",
"name": "人物正面照",
"wait_seconds": 30
}
```
表单上传视频:
```bash
curl -X POST "$GATEWAY_ORIGIN/api/volcengine/assets/create" \
-H "Authorization: Bearer $KEY" \
-F "file=@./motion.mp4;type=video/mp4" \
-F "name=人物动作参考" \
-F "wait_seconds=10"
```
公网 URL 上传音频:
```json
{
"url": "https://media.example.com/voice.mp3",
"asset_type": "Audio",
"name": "旁白音频"
}
```
- 文件和 Base64 由平台存入企业的私有 TOS 桶,再提交火山入库;公网 URL 由火山直接下载,平台不转存,地址须能被公网访问。
- 素材库满额时,平台只在火山明确返回“容量已满”后,删除本企业最早创建且未被使用的一条素材并重试一次;不会删除其他企业的素材或正在使用的素材。
- 同一企业的写操作(创建、删除)依次执行,前一个未完成时返回 409。
响应(仍在处理):
```json
{
"success": true,
"data": {
"id": "asset-example",
"uri": "asset://asset-example",
"status": "Processing"
}
}
```
响应(审核通过):
```json
{
"success": true,
"data": {
"id": "asset-example",
"uri": "asset://asset-example",
"status": "Active",
"name": "人物正面照",
"asset_type": "Image",
"group_id": "group-example",
"url": "https://..."
}
}
```
响应(审核未通过,HTTP 仍为 200):
```json
{
"success": true,
"data": {
"id": "asset-example",
"uri": "asset://asset-example",
"status": "Failed",
"error_code": "ERROR_CODE_FROM_VOLCENGINE",
"error_message": "审核未通过的原因"
}
}
```
| 字段 | 说明 |
| --- | --- |
| `id` | 素材 ID,创建成功即返回,请立即保存 |
| `uri` | 素材引用标识 `asset://`,状态为 `Active` 后才能使用 |
| `status` | `Processing`(处理或审核中)、`Active`(可用)、`Failed`(未通过) |
| `name` / `asset_type` / `group_id` | 素材名称、类型、所属素材组 |
| `url` | 火山返回的预览地址,会过期,不能当作永久地址 |
| `error_code` / `error_message` | `Failed` 时的原因 |
| `check_pending` | 为 `true` 表示素材已创建,但等待期间查询状态失败;请用[查询素材](business-assets.md#business-assets-section-2)继续查询,**不要重新创建** |
**创建成功不等于可用。**`wait_seconds` 内得到 `Active` 或 `Failed` 会立即返回;超时仍为 `Processing` 时,稍后调用[查询素材](business-assets.md#business-assets-section-2)。审核未通过同样是 HTTP 200 且 `success: true`,必须检查 `data.status`。
## 查询素材
```json
{"id": "asset-example"}
```
返回字段与[创建素材](business-assets.md#business-assets-section-1)相同。只能查询本企业通过平台创建的素材;建议每隔几秒查询一次,直到 `status` 不再是 `Processing`。
## 素材列表
```json
{"page": 1, "page_size": 20, "group_id": "group-example"}
```
| 字段 | 说明 |
| --- | --- |
| `page` | 页码,从 1 开始,默认 1 |
| `page_size` | 每页条数,1–100,默认 20 |
| `group_id` | 可选,只列出指定素材组 |
所有字段都可省略,但请求体须为 JSON 对象(至少传 `{}`)。
```json
{
"success": true,
"data": {
"items": [
{"id": "asset-example", "uri": "asset://asset-example", "status": "Active", "name": "人物正面照", "asset_type": "Image", "group_id": "group-example"}
],
"total": 1,
"page": 1,
"page_size": 20
}
}
```
列表只包含本企业通过平台创建的素材,火山控制台中已有的素材不会出现。并发创建或删除时,翻页结果可能重复或遗漏。
## 删除素材
```json
{"id": "asset-example"}
```
```json
{"success": true, "data": {"id": "asset-example", "deleted": true}}
```
只能删除本企业通过平台创建的素材。删除后素材不能再用于生成,请先确认没有进行中的任务在使用它。