Bulk Operation 完成后 URL 七天过期下载失败
现象#
一周前跑完的导出任务,今天点下载返回 403,响应体是一段 XML 而不是 JSONL;数据库里存的 bulkOperation.url 字段看着还有值。
原因#
url与 partialDataUrl 都是带签名的临时地址,完成或失败后七天失效- 只把链接存进数据库却没落盘文件,补跑时拿到的是过期地址
- 任务失败时只有
partialDataUrl可用,误以为 url 为空是解析出错 - 下载中断后用同一个链接重试,签名过期导致 Range 续传也无法完成
处理步骤#
- 收到 COMPLETED 后立即流式下载并写入对象存储,不要只保存链接
- 按行解析写入,单文件可能到 GB 级,禁止一次性读进内存
- 失败任务改读
partialDataUrl,并按 errorCode 判断是否值得重跑 - 需要重取时重新发起
bulkOperationRunQuery,旧链接无法续期 - 在任务表记录
completedAt,超过六天未下载的自动补拉
验收标准#
对象存储里的 JSONL 行数与 objectCount 一致;一周后仍能用已落盘文件重放,不依赖任何临时链接。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。