bigjpg 中文文档 下载 App

用 Python 把上传到下载的放大全流程串起来

脚本要做的五件事

把前几篇的接口段拼成一条流水线:

  1. 申请临时上传地址(img_upload);
  2. PUT 原图到上传地址;
  3. 创建放大任务(task,带四个参数);
  4. 轮询任务到终态(GET task);
  5. 失败走重试(POST task),成功下载结果到本地。

完整骨架

import time
import requests

API_KEY = "你的密钥"          # 用户中心 API 页复制
ROOT = "bigjpg.com"           # 接口域名(补协议在下方拼接)
HEADERS = {"X-API-KEY": API_KEY}
BASE = "https" + "://" + ROOT  # 拼出接口根地址

def upload_image(path):
    # 第一步:申请临时上传地址
    r = requests.post(f"{BASE}/api/img_upload", headers=HEADERS)
    info = r.json()
    # 第二步:PUT 文件(Content-Type 保持一致)
    with open(path, "rb") as f:
        requests.put(info["fileurl"], data=f,
                     headers={"Content-Type": "image/jpeg"})
    return info["fileurl"]        # 作为任务的 input

def create_task(image_url, style="art", noise="3", scale="1"):
    # 第三步:提交放大任务
    payload = {"style": style, "noise": noise,
               "x2": scale, "input": image_url}
    r = requests.post(f"{BASE}/api/task/",
                      json=payload, headers=HEADERS)
    return r.json()               # 里面有任务 ID(字段名见实际返回)

def wait_done(tid, timeout=3600):
    # 第四步:轮询到终态
    deadline = time.time() + timeout
    while time.time() < deadline:
        r = requests.get(f"{BASE}/api/task/{tid}", headers=HEADERS)
        task = r.json()
        # 状态字段以实际返回为准,这里示意判断
        if task.get("status") == "finished":
            return task
        if task.get("status") == "failed":
            return None           # 交给重试逻辑,见上一节
        time.sleep(60)
    raise TimeoutError(tid)

def download(url, out_path):
    # 第五步:结果落盘
    with requests.get(url, stream=True) as r, open(out_path, "wb") as f:
        for chunk in r.iter_content(8192):
            f.write(chunk)

if __name__ == "__main__":
    image = upload_image("your_image.jpg")
    task = create_task(image, style="art", noise="1", scale="1")
    result = wait_done(task["tid"])       # 字段名以实际返回为准
    if result:
        download(result["url"], "output.png")

运行前的清单

调试顺序建议

  1. 先打通上传段——img_upload 返回什么、PUT 返回码是否 2xx;
  2. 手动建一个任务——用 curl 建一个任务,把返回 JSON 完整打出来,确认任务 ID 与状态字段的真实名字,再回填脚本的字段解析;
  3. 再上轮询与批量——字段确认后,把 批量轮询与重试策略加回来。

与官方示例的关系

本文骨架的接口路径、参数名、鉴权头均整理自官方用户中心的 API 文档示例;返回体字段名以你实际收到的 JSON 为准——这是接入唯一可能「对不上文档」的地方,先打日志再写死。

相关阅读:API 接口全景、创建任务的参数说明。