Claude API Files API 怎么用:上传一次、用 file_id 反复引用,500 MB 单文件、过期时间和工作区权限

同一份 PDF 或图片要反复问,不必每次重传。Files API 上传一次得到 file_id,再到 document、image 块里引用。本文讲上传、管理、下载、500 MB 与 1 TB 限制、过期设置,以及工作区共享的安全风险。

NNathaniel bigo··原创首发·AI 辅助撰写
9 分钟读完
资料核对于 2026-11-05 · 依据官方文档与公开资料整理 其他 账号
本文根据 Claude 官方《Files API》整理,资料核对于 2026-11-05。配图为本站整理的示意图,不是界面截图。代码里的模型名取自官方当天示例,请以官方模型页为准。本站(bigolab.com)不是 Anthropic 官方网站。API 是按用量计费的独立服务,与 Claude 订阅分开计算,Key 的获取见 /guides/claude-api-key-console。

适用于谁

  • 同一份 PDF、图片要在很多请求里反复使用的开发者;
  • 多轮对话里带图片,发现请求体越来越大、越来越慢的人;
  • 要用代码执行工具分析数据文件,并下载生成结果(图表、报告)的人。

结论先说

  1. 上传一次拿到 file_id,之后只引用编号,不再重传文件内容。
  2. 引用写法:PDF 和纯文本用 document 块,图片用 image 块,source 都是 {"type": "file", "file_id": "..."}。
  3. 单文件最大 500 MB,每个组织总存储 1 TB。
  4. 你上传的文件不能下载;只有技能或代码执行工具生成的文件可以下载。
  5. 文件对整个工作区可见,所以绝不能接受用户传来的 file_id,这是官方的明确警告。
  6. 上传、下载、列表、删除都免费,文件内容在请求里用到时按输入 token 计费。

文件的生命周期

图:本站根据 Claude 官方《Files API》 整理的示意图

一、上传文件

Python:

python
import anthropic

client = anthropic.Anthropic()

uploaded = client.files.upload(
    file=("document.pdf", open("document.pdf", "rb"), "application/pdf"),
)
print(uploaded.id)

TypeScript:

typescript
import fs from "node:fs";
import Anthropic, { toFile } from "@anthropic-ai/sdk";

const client = new Anthropic();

const uploaded = await client.files.upload({
  file: await toFile(fs.createReadStream("document.pdf"), undefined, {
    type: "application/pdf",
  }),
});
console.log(uploaded.id);

官方提醒,TypeScript 里要显式指定内容类型,因为 Files API 不会替你推断。返回的元数据里有 id、filename、mime_type、size_bytes、created_at、downloadable 和 expires_at。上传的文件 downloadable 是 false。

二、在请求里引用

python
response = client.messages.create(
    model="claude-opus-5-5",  # 以官方模型页当天为准
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "请总结这份文件。"},
                {
                    "type": "document",
                    "source": {"type": "file", "file_id": uploaded.id},
                },
            ],
        }
    ],
)

文件类型和内容块的对应:

文件类型MIME 类型内容块
PDFapplication/pdfdocument
纯文本text/plaindocument
图片image/jpeg、image/png、image/gif、image/webpimage
数据集等其他文件不一container_upload(配合代码执行工具)

document 块还有三个可选字段:title、context,以及 citations(设 {"enabled": true} 启用引用)。docx、xlsx 这类二进制格式不能放进 document 块,需要先转成文字或 PDF。PDF 的详细规则见 /guides/claude-api-pdf-support,图片见 /guides/claude-api-image-input。

三、管理文件

  • 列表:client.files.list(),按创建时间由新到旧,默认一页 20 个,最多 1000 个;SDK 提供自动翻页。想一次核对已知的一批文件,可以最多传 100 个 ids[] 参数,不存在的编号会被静默忽略,要自己对照返回结果;
  • 元数据:Python 是 client.files.retrieve_metadata(file_id),TypeScript 是 client.files.retrieveMetadata(id);
  • 删除:client.files.delete(file_id)。删除后无法恢复,文件在删除后很快无法通过 API 访问,但可能仍存在于正在进行的 Messages 调用中;
  • 修改:文件创建后不能改内容也不能改名,想换内容只能重新上传、再删除旧的。

四、下载:只有生成的文件可以

能下载什么、不能下载什么

图:本站根据 Claude 官方《Files API》 整理的示意图

官方规定:只有技能或代码执行工具创建的文件能下载,元数据里 downloadable 为 true。你自己上传的文件下载会返回 400。生成文件的 file_id 出现在产生它的那次 Messages 响应的 bash_code_execution_tool_result 内容块里。Python 下载的写法是:

python
file_content = client.files.download(file_id)
file_content.write_to_file("downloaded_file.txt")

五、限制和过期

  • 大小:单文件最大 500 MB;每个组织总存储 1 TB;
  • 文件名:1 到 255 个字符,不能包含 <、>、:、"、|、?、*、\、/ 以及控制字符;
  • 速率:文件相关调用约每分钟 500 次请求,需要更高请联系官方销售;
  • 过期:上传时可加表单字段 expires_in_seconds,范围是 3600 秒(1 小时)到 7776000 秒(90 天)。到期后,下载返回 404,引用它的 Messages 请求会在推理前失败,元数据最多还能读 30 天,expires_at 的值在过去。过期时间只能在上传时设置,之后不能改。官方强调,过期是生命周期功能,不是保证删除的手段;想提前删除,用 DELETE;
  • 大小超窗口:文件内容仍受模型上下文窗口限制,比如把 500 MB 的纯文本放进请求会报 400。

六、最重要的安全提醒

官方用警告框强调:上传的文件对整个工作区可见。 文件不是绑定到某个终端用户、某次对话或某个会话的,任何有权访问该工作区的 API 密钥,都能访问其中所有文件。因此:

  • 绝不要接受来自终端用户或其他不可信来源的 file_id。 否则一个用户可以通过编号读到另一个用户上传的内容。file_id 应当当作服务端内部的引用,用户和文件的对应关系由你自己的应用保存;
  • 必须隔离的文件,放进单独的工作区,并用只属于该工作区的密钥访问;
  • 做多租户应用,官方建议每个租户一个工作区,工作区就是文件的隔离边界;每个组织最多 100 个工作区,不够可联系官方。

七、费用、保留与迁移说明

  • 费用:上传、下载、列表、取元数据、删除都免费;文件内容在 Messages 请求里用到时按输入 token 计价,价格以官方价格页当天为准;
  • 保留:官方标明 Files API 不符合零数据保留资格,文件会保留到你删除或它过期为止;
  • beta 变化:Files API 已脱离 beta,不再需要 anthropic-beta 请求头。仍带旧请求头 files-api-2025-04-14 的请求继续可用,但返回旧的 beta 响应形状(比如列表用 before_id、after_id);去掉请求头后列表改用 page 和 next_page 游标,expires_at 总会返回。SDK 里建议用 client.files,而不是旧的 client.beta.files,具体 SDK 版本要求见官方迁移说明。

常见问题

Q:文件报 413 或 400?

文件超过 500 MB 返回 413;文件类型和内容块不匹配、放进 document 块的是二进制格式、内容超过上下文窗口,都会返回 400。整体排查见 /guides/claude-api-error-codes。

Q:为什么引用文件报 404?

编号不存在、不在当前工作区,或文件已过期。

Q:每次上传要不要重复?

同一份文件在同一工作区只要上传一次,保存好 file_id,直到你删除它或它过期。

Q:和提示词缓存是什么关系?

文件引用解决的是“不重传”,缓存解决的是“不重复计算同一段前缀”,两者可以配合,缓存见 /guides/claude-prompt-caching。

参考资料

  • Claude 官方:Files API — https://platform.claude.com/docs/en/build-with-claude/files
  • Claude 官方:PDF support — https://platform.claude.com/docs/en/build-with-claude/pdf-support

Nathaniel 的更多内容

  1. 01

    Claude Code 处理大仓库:怎么让它只看需要的目录(子目录 CLAUDE.md、claudeMdExcludes、deny 规则)

    仓库太大,Claude Code 总在读无关文件、读进别的包的规则?本文按官方大仓库指南讲:从哪个目录启动、子目录 CLAUDE.md、claudeMdExcludes、Read 的 deny 规则、worktree.sparsePaths、additionalDirectories,以及一份合并后的配置示例。

    Claude0
  2. 02

    Claude Code 在 CI 里跑:从本机 claude -p 到 GitHub Actions 的完整例子(自动审 PR、控成本)

    一条线走完 Claude Code 的 CI 用法:先在本机用 claude --bare -p 配 --json-schema 跑通,再写进 GitHub Actions 用 claude-code-action@v1 自动审 PR,最后加上 --max-turns、超时、并发限制来控成本,并附上常见故障的排查顺序。

    Claude0
  3. 03

    Claude Code 自定义 subagent 实例:测试员、调试员、只读调研员、只读数据库员怎么写

    四个可直接改的 subagent 实例:跑测试的 test-runner、找根因的 debugger、只读调研员、用 PreToolUse hook 限成只读 SQL 的 db-reader;讲 tools、disallowedTools、model、maxTurns 怎么配,怎么点名调用。

    Claude0
  4. 04

    Claude Code 的 CLAUDE.md 模板:前端、后端、数据分析各一份,附拆分与自检方法

    直接拿去改的三份 CLAUDE.md 模板(前端、后端、数据分析),每份都控制在官方建议的 200 行以内;再讲怎么用 .claude/rules 的 paths 拆出专属规则、用 @ 导入长文档,以及用 /context all 和 /doctor prompt-audit 检查是否生效。

    Claude0
  5. 05

    Claude Code 自己写一个插件并发布到 marketplace:plugin.json、marketplace.json、validate 到团队安装的完整流程

    想把自己写的 Skill、Hook 打包给团队用?按 Claude Code 官方 Plugins 文档,从目录结构、plugin.json、claude plugin validate,到写 marketplace.json、推到 Git、让同事一条命令安装,再到版本更新,走完一遍完整流程。

    Claude0
  6. 06

    Claude Code 写一个会自动触发的 Skill:从需求到触发,用 description、when_to_use 和 paths 控制它什么时候出场

    写好的 Skill 总是不触发,或者什么都触发?本文按 Claude Code 官方「Extend Claude with skills」走一遍完整实例:把「改数据库迁移前先检查」写成一个会自动出场的 Skill,包含 description、when_to_use、paths、附带脚本、触发测试和评估。

    Claude0

同产品的其他教程

  1. 01

    Claude Code 配 Sentry MCP 排查线上报错:添加命令、浏览器授权、贴 issue 链接修 bug 和插件子智能体

    线上报错只能手动复制堆栈给 Claude Code?Sentry 官方提供 MCP 服务,可以让它直接读 issue、堆栈和 trace。本文按 Claude Code 官方 MCP 文档和 Sentry MCP 官方说明,讲添加命令、/mcp 授权、典型排查流程、插件方式和自托管注意事项。

    Claude0
  2. 02

    Claude Code 配 Context7 MCP 查最新文档:两种安装方式、use context7 怎么写、指定库和版本

    Claude Code 写出来的代码用了旧版 API?Context7 是一个把库的最新文档喂给编程助手的 MCP 服务。本文按 Context7 官方仓库和文档,讲两种安装方式、在 Claude Code 里的添加命令、use context7 与 library ID 的写法,以及使用时的注意事项。

    Claude0
  3. 03

    Claude API 用量层级与速率限制:Evaluation / Start / Build / Scale 怎么分、月度花费上限、自设上限和怎么申请提额

    Claude API 的限额到底按什么算?按官方《Rate limits》讲清用量层级、RPM / ITPM / OTPM、缓存读取为何不占 ITPM、各层级月度花费上限、自设花费上限的 400、工作区限额、响应头,以及在 Console 里 Request tier increase 提额。

    Claude0
  4. 04

    Claude API 模型 ID 怎么写、怎么查可用模型:dateless 命名、别名区别、Models API 的 lifecycle 和 capabilities

    model 参数该填什么?按官方《Models overview》《Model IDs and versioning》《List Models》讲清 Claude 模型 ID 的格式、4.6 之前带日期与之后不带日期的区别、别名是什么,以及用 GET /v1/models 查可用模型、生命周期和能力字段。

    Claude0
  5. 05

    Claude API 代码执行工具(code execution)怎么用:tools 写法、上传文件分析、取回生成文件、容器限制和计费

    想让 Claude API 真的跑代码做数据分析、生成图表和文件?按官方《Code execution tool》讲清三个工具版本、最小请求、上传 CSV 分析、$OUTPUT_DIR 取回文件、容器内存与联网限制、错误码、容器复用和计费规则。

    Claude0
  6. 06

    Claude API 联网搜索工具(web search tool)怎么用:tools 写法、max_uses、域名过滤、引用字段和计费

    想让 Claude API 回答带最新信息?按官方《Web search tool》讲清 web_search 工具的三个版本、请求写法、max_uses、域名过滤、引用字段、错误码和计费,附排查表。

    Claude0

0 条评论

登录 后参与评论

还没有评论,来抢沙发~