Files
Files 保存源文件视图与已生成的结果,不提供文件列表。异步解析统一使用 Tasks,客户端按 files[].result_url 下载,不自行拼接存储路径。
| 方法 | 地址 | 行为 |
|---|---|---|
| GET | /v1/files/{file_id} |
返回文件元数据。 |
| GET | /v1/files/{file_id}/content |
流式下载已保存的解析产物;源文件不提供公共下载。 |
FileObject:文件元数据
元数据接口成功返回 200 OK,Content-Type: application/json,JSON 正文使用 UTF-8。
下列字段在当前本地 API Server 和 Router 的文件对象中均会出现;可空值写为 null,不省略字段。
| 字段 | JSON 类型 | 可为 null | 含义 |
|---|---|---|---|
id |
string | 否 | 不透明的 Files ID;Router 返回自己的公共 ID。 |
object |
string | 否 | 固定为 file。 |
file_name |
string | 否 | 文件逻辑名称;结果采用 <输入文件主名>.<产物扩展名>。 |
bytes |
integer | 否 | 实际保存的文件大小,单位为字节。 |
created_at |
integer | 否 | 文件视图创建时间,Unix 秒级时间戳。 |
expires_at |
integer | 是 | 文件视图的过期时间,Unix 秒;活动引用或保留策略可能使其暂为 null。 |
purpose |
string | 否 | parse 表示源文件,parse_output 表示结果。 |
sha256sum |
string | 是 | 保存字节的小写 SHA-256;未提供元数据时为 null。 |
Files 的时间字段为 Unix 秒级整数,与 Tasks 的 ISO-8601 时间字符串不同。
GET /v1/files/{file_id}:查询元数据
成功返回 200 OK + application/json,正文直接是 FileObject,没有额外包装:
{
"id": "file-result0123456789abcdef",
"object": "file",
"bytes": 4096,
"created_at": 1792728001,
"expires_at": null,
"file_name": "report.zip",
"purpose": "parse_output",
"sha256sum": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
}
示例中的 ID、大小、时间和 hash 为示意值。本地源文件元数据使用相同结构,purpose 为 parse,file_name 为输入文件名。Tasks 不公开源缓存 ID;创建响应中的 files[].file_id 即本次解析结果的公共 Files ID,Router 将它映射到 worker 的结果 ID。Tasks 的 file_name/bytes 描述输入,Files 的 file_name/bytes 描述实际产物。
产物生成前只预留 ID,不注册 Files 对象:GET 元数据和 GET content 均返回 404 file_not_found。创建任务的 ID 预留不代表产物已经存在,准备与执行状态通过 GET Tasks 查询。
产物保留与清理
当前不提供产物删除接口,DELETE /v1/files/{file_id} 在认证通过后返回 405 Method Not Allowed。
任务取消使用 POST /v1/tasks/{task_id}/cancel,保留已完成的产物和下载链接;取消任务不会删除这些资源。
产物按既有保留期由内部机制自动回收,活动执行、下载引用和 Router 租约继续受保护。
GET /v1/files/{file_id}/content:下载结果
完整下载成功时返回 200 OK 和文件二进制正文,不是 JSON,也不是 Base64 字符串:
HTTP/1.1 200 OK
Content-Type: application/zip
Content-Disposition: attachment; filename="report.zip"
<ZIP 文件二进制内容>
| 产物 | Content-Type | 正文格式 |
|---|---|---|
| default、LaTeX 或多格式 ZIP | application/zip |
ZIP 文件字节。 |
| 单独 DOCX | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
DOCX 文件字节。 |
| 单独 HTML | text/html; charset=utf-8(本地) |
UTF-8 HTML 文件字节。 |
下载建议文件名由 Content-Disposition 提供,非 ASCII 文件名可能使用标准的 filename* 编码。
JSON 字段使用 file_name;HTTP 附件头的标准参数仍是 filename 或 filename*。ZIP 成员和输出格式见 Tasks 输出格式与下载。
本地 API Server 直接流式返回产物;Router 代理 worker 的字节及下载头。Tasks 返回的 SaaS result_url 可能直接指向对象存储,不要求经过本路由。
错误与保留期
请求失败使用非 2xx 状态码和 JSON 错误对象,error.code/message 必带,error.param 可选,不包含 type,详见 响应与错误。
常见情况为 401 invalid_api_key、404 file_not_found;尝试通过 /content 下载源文件返回 403 feature_requires_api_key,源文件下载不属于公共能力。
源文件通过 Tasks 的 JSON 清单和返回的上传链接创建。相同 hash 的有效缓存免传;不同文件名可以共享一份源字节,文件名和解析参数仍属于各自任务。
API Server 与 Router 默认保留 86400 秒,每 300 秒扫描。--retention-seconds 优先于 MINERU_API_RETENTION_SECONDS,0 禁用正常保留期清理。上传链接固定的一小时窗口不随该设置改变。
清理只删除过期视图和无引用字节。排队、执行、上传、下载持有的引用阻止物理删除;结果保留期从父任务完成资源清理后开始。 Router 映射结果 Files 地址,源缓存由按调用方隔离的私有引用管理,不依赖下游源 Files ID。父任务清理后开始私有源缓存保留期,后台独立回收并维持 worker 结果租约。SaaS 可以提供对象存储签名地址,不要求实现本地 Files 下载路由。