技术博客
条码生成图片 12 小时过期:缓存与本地落盘保存策略

条码生成图片 12 小时过期:缓存与本地落盘保存策略

作者: 万维易源
2026-08-28
条码图片12小时过期本地落盘缓存对象存储
# 条码生成图片 12 小时过期:缓存与本地落盘保存策略 > 接口/接入点:条码生成与识别(apiCode 1129)· 1129-1 生成 | 是否免费:免费 | 请求方式:POST/GET | 返回格式:JSON | 适用人群:开发者、架构师 | 阅读时间:约 6 分钟 ## TL;DR - 生成接口返回的 `imgUrl` **每 12 小时删除数据**,不是永久地址。 - 生产环境必须在生成后**立即下载落盘**到自有存储(本地/对象存储/CDN)。 - 已落盘后可做缓存复用,避免重复生成;原 `imgUrl` 仅作"临时取图通道"。 ## Why:为什么必须关心过期 很多开发者第一次用会直接把 `imgUrl` 写进数据库、印进价签、嵌进网页长期展示。12 小时后链接失效,页面变成裂图、价签扫不出——这是本接口最高频的"坑"。本篇给你可落地的保存方案。 ## What:时效事实 | 项 | 说明 | |----|------| | 过期对象 | 仅生成接口(1129-1)返回的图片链接 `imgUrl` | | 时效 | 每 12 个小时删除数据(文档原文) | | 识别接口(1129-2/3/4) | 即时返回 `retText`,不存储图片,无此过期问题 | > 注意:过期的是"图",不是"数据"——你存入自己系统的 SKU 与对应落盘图片才是长期资产。 ## How:生成即落盘(Python) ```python import requests, hashlib, os APPKEY = "YOUR_APPKEY" STORE = "barcodes" os.makedirs(STORE, exist_ok=True) def gen_and_save(content: str, fmt: str = "5") -> str | None: r = requests.post( f"https://route.showapi.com/1129-1?appKey={APPKEY}", data={"content": content, "formatType": fmt}, timeout=10, ).json().get("showapi_res_body", {}) if r.get("ret_code") != "0" or not r.get("imgUrl"): return None # 立即下载落盘,文件名用内容哈希避免重复 name = hashlib.md5(content.encode()).hexdigest() + ".jpg" img = requests.get(r["imgUrl"], timeout=10).content path = os.path.join(STORE, name) with open(path, "wb") as f: f.write(img) return path # 返回本地/对象存储路径,长期可用 saved = gen_and_save("6901294172197") print("本地路径(可长期用):", saved) ``` cURL(仅取图,落盘需配合下载): ```bash curl -X POST "https://route.showapi.com/1129-1?appKey=YOUR_APPKEY" \ -H "content-type: application/x-www-form-urlencoded" \ -d "content=6901294172197&formatType=5" ``` Node.js(生成 + 下载): ```javascript const APPKEY = "YOUR_APPKEY"; const r = await fetch(`https://route.showapi.com/1129-1?appKey=${APPKEY}`, { method: "POST", headers: { "content-type": "application/x-www-form-urlencoded" }, body: new URLSearchParams({ content: "6901294172197", formatType: "5" }) }); const { imgUrl } = (await r.json()).showapi_res_body; const img = await (await fetch(imgUrl)).arrayBuffer(); // 写入对象存储/CDN,保存返回的持久 URL ``` ## 返回示例与解析 ```json { "showapi_res_body": { "imgUrl": "http://app2.showapi.com/img/barCodeImg/20160930/xxxx.jpg", "ret_code": "0" } } ``` 拿到 `imgUrl` 后第一时间 GET 下载,不要等到展示时再拉。 ## 进阶 / 边界 - **缓存复用**:同一 `content`+`formatType` 生成的图内容稳定,可用 `content` 哈希做 key 缓存,命中则直接返回已落盘地址,省调用。 - **对象存储转发**:下载后上传到 OSS/COS/S3 并走 CDN,得到永久可访问地址;原 `imgUrl` 仅作临时通道。 - **不要依赖原链接做长期字段**:数据库里存"本地/对象存储路径",而非 `imgUrl`。 ## FAQ **Q:过期后还能用原 imgUrl 吗?** 不能。每 12 小时删除数据,过期链接返回图片已不存在;务必用落盘后的自有地址。 **Q:识别接口返回的文字会过期吗?** 不会。1129-2/3/4 即时返回 `retText`,不存储图片,无 12h 过期问题。 **Q:同一内容重复生成会出一样的图吗?** 图像内容由 `content`+`formatType`+尺寸决定,理论一致;但 `imgUrl` 路径会变且都会过期,故以落盘文件为准、可做哈希缓存。 **Q:落盘后还需要接口吗?** 展示/打印用落盘图即可;仅当需要"按内容重新出图"(如换格式/尺寸)时再调用生成接口。 ## 相关能力 / 下一步阅读 - [零售与仓储如何用条码生成接口做商品条码与价签](https://www.showapi.com/guides/barcode-generate-retail-1129) - [条码生成与识别:返回字段全解(imgUrl / retText / ret_code / msg)](https://www.showapi.com/guides/barcode-response-fields-1129) - [条码生成与识别:13 种条码格式(formatType)对照与选型指南](https://www.showapi.com/guides/barcode-format-types-1129) - **本系列共 12 篇**:查看[条码生成与识别指南总目录](https://www.showapi.com/guides/barcode-guides-1129)