Skip to content

图片上传与管理(Image Upload & Management)

上传本地图片到妙图云存储,获取访问 URL,用于后续图像处理任务。上传的图片以内容记录形式管理,可列出和删除。

设计说明

妙图 OpenAPI 将用户的图片视为**内容(Content)**而非原始文件。每次上传都会产生一个 图片 IDid)和可访问的 URL

  • 图像处理任务(抠图、风格转换、高清放大等)通过 URL 引用图片
  • 通过 ID 可列出历史上传、按 ID 删除

提示

多数图像处理接口支持直接使用 公网 URL,只有当图像无法通过公网访问时才需要先上传。


基本信息

接口路径Scope
上传图片POST /images/upload*
查询图片列表GET /images/page*
删除图片DELETE /images/{id}*

上传图片

请求

路径POST /images/upload
Content-Typemultipart/form-data

参数类型必填说明
fileFile图片文件(支持 JPEG、PNG、WebP、SVG)
titlestring图片标题,默认使用原始文件名

响应

json
{
  "code": 0,
  "msg": "成功",
  "data": {
    "id": 1024,
    "url": "https://img.magiqsight.com/files/42/image_abc123.png",
    "width": 1920,
    "height": 1080,
    "title": "product.png",
    "createTime": "2026-06-03T10:00:00"
  }
}
字段说明
id图片内容 ID,用于列出和删除
url图片访问 URL,用于图像处理任务
width / height图片尺寸(像素),SVG 可能为 0
createTime上传时间

请求示例

curl

bash
curl -X POST \
  -H "Authorization: Bearer $TUSEN_API_TOKEN" \
  -F "file=@/path/to/product.png" \
  -F "title=商品主图" \
  "https://magiqsight.com/openapi/v1/images/upload"

Python

python
import requests

url = "https://magiqsight.com/openapi/v1/images/upload"
headers = {"Authorization": f"Bearer {api_token}"}

with open("product.png", "rb") as f:
    files = {"file": ("product.png", f, "image/png")}
    data = {"title": "商品主图"}
    response = requests.post(url, headers=headers, files=files, data=data)

result = response.json()
if result["code"] == 0:
    image_id = result["data"]["id"]
    image_url = result["data"]["url"]
    print(f"上传成功:id={image_id}, url={image_url}")

Node.js

javascript
const FormData = require('form-data');
const fs = require('fs');
const axios = require('axios');

const form = new FormData();
form.append('file', fs.createReadStream('product.png'));
form.append('title', '商品主图');

const res = await axios.post(
  'https://magiqsight.com/openapi/v1/images/upload',
  form,
  {
    headers: {
      ...form.getHeaders(),
      'Authorization': `Bearer ${process.env.TUSEN_API_TOKEN}`
    }
  }
);
const { id, url } = res.data.data;
console.log(`上传成功:id=${id}, url=${url}`);

查询图片列表

路径GET /images/page

参数类型默认值说明
pageNointeger1页码
pageSizeinteger20每页数量(最大 100)

响应

json
{
  "code": 0,
  "msg": "成功",
  "data": {
    "total": 5,
    "list": [
      {
        "id": 1024,
        "url": "https://img.magiqsight.com/files/42/image_abc123.png",
        "width": 1920,
        "height": 1080,
        "title": "product.png",
        "createTime": "2026-06-03T10:00:00"
      }
    ]
  }
}

请求示例

bash
curl -H "Authorization: Bearer $TUSEN_API_TOKEN" \
  "https://magiqsight.com/openapi/v1/images/page?pageNo=1&pageSize=20"

删除图片

路径DELETE /images/{id}

参数位置说明
id路径参数图片内容 ID(上传时返回的 id

响应

json
{
  "code": 0,
  "msg": "成功",
  "data": true
}

请求示例

bash
curl -X DELETE \
  -H "Authorization: Bearer $TUSEN_API_TOKEN" \
  "https://magiqsight.com/openapi/v1/images/1024"

完整工作流示例

上传图片并提交抠图任务:

python
import requests
import time

BASE = "https://magiqsight.com/openapi/v1"
headers = {"Authorization": f"Bearer {api_token}"}

# 1. 上传图片
with open("product.jpg", "rb") as f:
    resp = requests.post(f"{BASE}/images/upload",
                         headers=headers,
                         files={"file": ("product.jpg", f, "image/jpeg")})
resp.raise_for_status()
image = resp.json()["data"]
image_url = image["url"]
image_id = image["id"]
print(f"上传成功:id={image_id}")

# 2. 提交抠图任务
resp = requests.post(f"{BASE}/image/matting",
                     headers=headers,
                     json={"url": image_url})
resp.raise_for_status()
task_id = resp.json()["data"]["taskId"]
print(f"任务已提交:taskId={task_id}")

# 3. 轮询任务结果
for _ in range(60):
    resp = requests.get(f"{BASE}/tasks/{task_id}", headers=headers)
  resp.raise_for_status()
  task = resp.json()["data"]
  status = task["status"]
  if status == 1:
    result_url = task["imageUrls"][0]
        print(f"抠图完成:{result_url}")
        break
  elif status in (2, 3):
    print(f"任务结束:status={status}, resultMetadata={task.get('resultMetadata')}")
        break
    time.sleep(2)

# 4. 清理:删除原图
requests.delete(f"{BASE}/images/{image_id}", headers=headers)
print("原图已删除")

注意事项

文件限制

项目限制
单文件最大20 MB
建议分辨率不超过 4096×4096 像素
支持格式JPEG、PNG、WebP、SVG

存储与隐私

  • 上传的图片存储在用户私有空间,其他用户无法访问
  • 文件长期保存,不会自动过期
  • 返回的 URL 可直接用于所有图像处理接口
  • 建议定期通过删除接口清理不再使用的图片

错误代码

code说明
400请求参数错误(文件为空、格式不支持等)
401未授权,令牌无效或过期
429请求频率超限,请降低速率后重试

限流策略

  • 速率限制:每秒最多 10 次请求
  • 超出后返回 429 Too Many Requests,请使用指数退避重试

相关接口

妙图设计 API Beta