海艺思创

首页/ AI绘图教程/ OpenAI Images API 生成结果 URL 和 Base64 怎么保存

AI绘图教程

OpenAI Images API 生成结果 URL 和 Base64 怎么保存

OpenAI Images API 生成结果 URL 和 Base64 怎么保存

准备

先确定图片最终放在哪里,例如应用服务器的受管目录、对象存储或团队素材库。为每次生成预留一条任务记录,至少包含任务编号、请求时间、模型、提示词、输出格式、原始返回类型和最终文件地址。

Images API 的图片返回可能是 urlb64_json。资料显示,使用 dall-e-2dall-e-3 时可选择这两种返回格式;返回的 URL 仅在图片生成后 60 分钟内有效。GPT Image 模型则返回 Base64 编码图片,因此归档流程应以“收到结果即落盘”为原则。

先判断该保存 URL 还是 Base64

  • 响应中有 url:立刻由服务端下载图片二进制,再上传到自己的存储;数据库保存自己的文件地址,不把临时 URL 作为长期展示地址。
  • 响应中有 b64_json:把 Base64 字符串解码为二进制文件,再上传或写入受管目录;不要把整段字符串直接用于长期页面展示。
  • 同一任务返回多张图:逐张生成独立文件名和素材记录,避免用同一文件名覆盖前一张。

分步操作

  1. 创建生成任务时,先决定本次要使用 URL 返回还是 Base64 返回。仅对支持该参数的模型传入 response_format;不要假设所有模型都接受该设置。
  2. 收到响应后遍历 data 中的每一项。优先检查是否存在 b64_json,否则检查是否存在 url;字段缺失时记录完整任务错误并停止入库。
  3. 若拿到 URL,在有效期内由后端发起下载请求,读取响应二进制内容。下载成功后上传到你的存储,并记录存储返回的文件地址。
  4. 若拿到 b64_json,先执行 Base64 解码,得到字节内容;按本次输出格式写为对应图片文件,再上传或入库。
  5. 为最终文件生成不含空格的唯一文件名,例如 img_任务号_序号.png。扩展名应与实际输出格式一致,不要仅凭默认名称猜测。
  6. 写入素材记录:任务编号、图片序号、最终文件地址、文件格式、生成参数和保存状态。提示词追溯可沿用记录改写后提示词的方法,把原始请求和实际结果放在同一条记录中。
  7. 读取刚保存的文件做一次校验:确认文件存在、大小大于零,且业务侧能正常打开或读取。通过后再把任务标为完成。

可复制模板或示例

下面是 Python 侧的通用处理示例。示例只演示结果落盘逻辑,response 为已获得的 Images API 响应对象;实际项目中请将本地保存替换为你的对象存储上传步骤。

import base64
from pathlib import Path
from urllib.request import urlopen

output_dir = Path("generated_images")
output_dir.mkdir(exist_ok=True)

for index, item in enumerate(response.data, start=1):
    file_path = output_dir / f"img_job_123_{index}.png"

    if getattr(item, "b64_json", None):
        image_bytes = base64.b64decode(item.b64_json)
    elif getattr(item, "url", None):
        with urlopen(item.url) as remote_file:
            image_bytes = remote_file.read()
    else:
        raise ValueError("图片响应中没有 url 或 b64_json")

    file_path.write_bytes(image_bytes)

    if not file_path.exists() or file_path.stat().st_size == 0:
        raise ValueError("图片文件保存失败")

    print({"index": index, "path": str(file_path)})

可复制的素材记录字段模板:

{
  "job_id": "img_job_123",
  "image_index": 1,
  "result_type": "b64_json",
  "storage_path": "generated_images/img_job_123_1.png",
  "output_format": "png",
  "save_status": "verified"
}

翻车怎么改

常见故障:页面过一段时间后图片无法显示。原因:应用长期使用了接口返回的 URL,而该 URL 只有有限有效期。修正动作:把 URL 当作一次性下载入口,在响应到达后立即下载到自己的存储;页面和素材库只引用自己的文件地址。

常见故障:Base64 解码后文件打不开。原因:把整个响应对象或带有其他前缀的字符串传给了解码器,或写入过程中使用了文本模式。修正动作:只取 b64_json 字段进行 Base64 解码,并以二进制方式写入;保存后立即检查文件大小和可读性。

常见故障:批量生成后素材互相覆盖,无法追溯来源。原因:文件名固定,或只保存图片没有保存任务信息。修正动作:文件名加入任务编号和图片序号,并为每张图单独记录参数、返回类型、最终存储地址与状态。

完成前检查

  • 发布前验收项:随机打开已归档的图片,确认页面引用的是自己的存储地址,而不是接口临时 URL。
  • 每张结果均有唯一文件名,文件存在且大小大于零。
  • 每条素材记录都能对应到任务编号、图片序号和最终文件地址。
  • Base64 结果已完成解码并保存为二进制图片文件,没有把长字符串直接当作素材文件。
  • 需要透明背景或指定格式时,已按实际输出格式检查文件扩展名与素材可用性。

下一步

把这篇的方法练一遍

提示词和步骤可以带到创作里直接试做一版。

去创作 看同栏目更多