结果从哪里来
文生图、单图编辑和多参考图示例均保存 response.json;流式教程的Python和Node.js客户端在取得图片与结束事件后保存同样结构。下面直接读取这个文件,不再次调用生成API。
返回字段
| 字段与类型 | 填写规则、默认值与限制 |
|---|---|
created;integer | 响应中的创建时间,Unix秒时间戳;可用于记录请求时间。 |
model;string | 响应中报告的模型ID;保存原值便于排查,不以它替代请求侧模型选择。 |
data;object[] | 成功响应的图片数组;本目录请求一张输出图。空数组不能当作生成成功。 |
data[].url;string | response_format=url时的结果字段;与b64_json按返回方式选择读取。临时链接应尽快下载,不应作为永久业务地址。 |
data[].b64_json;string | response_format=b64_json时的纯Base64结果,不含data URI前缀;解码后再写入图片文件。 |
data[].size;string | 结果图片的实际宽x高;分辨率档位生成的实际尺寸以此值和图片为准。 |
data[].error;object | 条件字段:该项失败时的错误对象,包含code和message;不能把含错误的项当作图片。 |
error.code;string | 错误对象中的机器可读代码;顶层error和data[].error均应检查。 |
error.message;string | 错误对象中的可读说明;记录时删除密钥及私人素材内容。 |
usage;object | 返回时记录用量对象;缺省时不要自行推算费用。 |
usage.generated_images;integer | 成功生成的图片数。用于核对结果,不直接代表本站结算金额。 |
usage.output_tokens;integer | 返回时记录输出token数;不自行从像素或厂商价格推导本站费用。 |
usage.total_tokens;integer | 返回时记录总token数;本站费用以控制台的用量记录为准。 |
error;object | 条件字段:整个请求失败时的错误对象。即使HTTP为200,也应检查错误及图片是否存在。 |
成功判断需要同时满足HTTP成功、没有顶层或图片项错误、至少有一项实际URL或Base64图片数据。结果中的 output_format、mime_type 不作为本目录的必返字段;不要依赖它们决定文件扩展名。
下列为同步结果的合成结构示意,其中URL不可下载,用量值只用于说明结构,不代表费用:
{
"created": 1789880400,
"model": "doubao-seedream-5-0-260128",
"data": [
{
"url": "https://example.invalid/generated.png",
"size": "2048x2048"
}
],
"usage": {
"generated_images": 1,
"output_tokens": 16384,
"total_tokens": 16384
}
}下载鉴权与链接有效期
图片URL携带结果访问所需的信息,下载时不发送青云TOP API Key。URL可能指向其他存储域名,应作为受保护的业务数据保管。示例只接受HTTPS且不自动跟随重定向;若返回跳转,请核实最终地址后下载。
官方标注图片链接为24小时内的临时链接,请在生成后尽快下载,不依赖完整24小时可用或本站额外保存承诺。需要长期保存时写入自己的存储。链接过期时,本流程没有可用于刷新链接的任务查询接口,请保留请求记录联系本站支持。
代码示例:保存已有结果
cURL示例使用Bash、cURL 7.76+、jq和base64;Python需3.10+并安装requests;Node.js需20+,保存为.mjs运行。下载示例设置120秒超时(Python为单次读取超时),不是链接保存时长或下载速度承诺。
Python和Node.js按PNG/JPEG文件签名保存 output-1.png 或 output-1.jpg,并拒绝错误页或未知格式。cURL/Bash使用中性的 .image 扩展名,需由你的应用检查图片格式后命名。示例会覆盖同名文件,请按业务编号另存。
set -euo pipefail
jq -e '(.error | not) and (.data | type == "array" and length > 0) and all(.data[]; .error | not)' response.json > /dev/null
count=$(jq '.data | length' response.json)
for ((index=0; index<count; index++)); do
filename="output-$((index + 1)).image"
if jq -e --argjson i "$index" '.data[$i].b64_json | type == "string" and length > 0' response.json > /dev/null; then
# Linux / Git Bash 使用 --decode;macOS 可改为 -D。
jq -r --argjson i "$index" '.data[$i].b64_json' response.json | base64 --decode > "$filename"
else
url=$(jq -er --argjson i "$index" '.data[$i].url | select(type == "string" and length > 0)' response.json)
# 不发送 API Key,不自动跟随重定向。
status=$(curl --silent --show-error --fail-with-body --proto '=https' \
--connect-timeout 30 --max-time 120 --output "$filename" --write-out '%{http_code}' -- "$url")
[[ "$status" == 2?? ]] || { echo "下载未成功:HTTP $status" >&2; exit 1; }
fi
[[ -s "$filename" ]] || { echo "图片文件为空" >&2; exit 1; }
echo "$filename"
done错误与下一步
Base64输出是纯编码字符串,不能把它作为UTF-8文本写成PNG;输入参考图使用的data URI则必须带前缀,两者不要混淆。下载收到403、404或HTML时,不要仅修改扩展名冒充图片,也不要自动再次创建生成请求。
费用以青云TOP控制台的用量和账单为准。usage 用于记录请求用量,不能直接换算为本站价格、退款或成功率保证。其他问题见常见错误。参考:官方图像生成响应。