bigjpg 中文文档 下载 App

预签名上传接口把原图送上去的两步操作

为什么不是「直接传文件」

官方接口的第一段是 POST /api/img_upload——注意它不收图片本体。它返回的是一个临时上传地址(官方文档描述为预签名上传 URL,底层是对象存储的临时直传通道),然后由你用 HTTP PUT 把文件推到这个地址。

这个设计的好处:文件数据不流经接口服务器,直进对象存储,大文件更稳、服务器压力更小。

两步的代码骨架

第一步:申请上传地址

curl -X POST <接口地址>/api/img_upload \
  -H 'X-API-KEY: 你的密钥'

返回内容里带着上传地址字段(官方 Python 示例读取的是返回 JSON 的 fileurl 字段,上传地址字段见你实际拿到的返回体)。

第二步:把文件 PUT 上去

curl -X PUT '<上一步拿到的上传地址>' \
  --data-binary @你的图片.jpg \
  -H 'Content-Type: image/jpeg'

官方文档强调:使用与申请时相同的 Content-Type 上传。Content-Type 不一致是这段最常见的坑。

第三步不是接口,是记账

PUT 成功后,这个文件的可访问地址就是下一段创建任务时要传的 input 参数。把地址接住传下去即可,见创建任务的参数说明。

骨架的 Python 版

import requests

API_KEY = "你的密钥"
headers = {"X-API-KEY": API_KEY}

# 第一步:申请临时上传地址
r = requests.post(f"{root}/api/img_upload", headers=headers)
upload = r.json()

# 第二步:原样 PUT 文件(Content-Type 与返回要求一致)
with open("your_image.jpg", "rb") as f:
    requests.put(upload["fileurl"], data=f,
                 headers={"Content-Type": "image/jpeg"})

(root 为接口根地址,从用户中心 API 页复制,此处省略;完整可运行版见 Python 全流程示例。)

上传环节的三个提醒

  1. 临时地址有时效——拿到地址尽快传,别囤;
  2. 文件超限在上传后才会暴露——体积与像素限制和网页端一致,见尺寸上限;
  3. input 也可以不传自己的——创建任务接口的 input 收的是图片 URL,理论上任何公网可访问的图片地址都能用,不一定走这段上传。

相关阅读:API 接口全景、获取密钥。