Files API
上传文件一次,即可在 Messages 请求中通过 file_id 引用它们,并下载由 skills 或代码执行工具创建的输出。
用法因产品而异
document、image 或 container_upload 块中通过 file_id 引用已上传的文件。user.message 事件中引用 file_id。Files API 让您可以上传和管理文件以便与 Claude API 一起使用,而无需在每次请求时重新上传内容。这在使用代码执行工具提供输入(例如数据集和文档)然后下载输出(例如图表)时特别有用。除本指南外,您还可以直接浏览 API 参考可查看包含 API 参考文档链接的预览——按 Tab 键直到焦点进入卡片,按 Escape 键返回。。
文件类型支持
所有支持相应文件类型的模型都支持在 Messages 请求中引用 file_id。所有当前的 Claude 模型都支持图像。关于 PDF 和代码执行工具支持的其他文件类型,请参阅链接页面了解模型支持情况。
Files API 的工作原理
Files API 提供了一种"创建一次、多次使用"的文件处理方式:
- 上传文件到 Anthropic 的安全存储并获得唯一的
file_id - 下载文件,这些文件由 skills 或代码执行工具创建
- 引用文件,在 Messages可查看包含 API 参考文档链接的预览——按 Tab 键直到焦点进入卡片,按 Escape 键返回。 请求中使用
file_id而不是重新上传内容 - 管理您的文件,通过列出、检索和删除操作
文件的作用范围不限定于某个最终用户、对话或会话。任何有权访问某个工作区的 API 密钥都可以访问上传到该工作区的任何文件。每个服务账户,以及组织角色允许 API 访问的每个用户,除了可以使用您将其添加到的任何工作区之外,还可以使用默认工作区(Default Workspace),因此请将必须保持隔离的文件放在其专属的工作区中,并且仅使用作用范围限定于该工作区的密钥来访问它们。切勿接受来自最终用户或其他不受信任来源的 file_id 值:用户提供的文件 ID 会让您应用程序的某个用户读取另一个用户上传的内容。请将文件 ID 视为服务器端引用,并在您的应用程序中维护用户与其文件之间的映射关系。
如果您要基于 Files API 构建多租户应用程序,请为每个租户创建一个单独的工作区。工作区是文件的隔离边界,因此为每个租户设置一个工作区,可以让该租户的数据与其他所有租户实现硬隔离。每个组织最多可以拥有 100 个工作区;如果您需要更多,请联系您的客户团队。
如何使用 Files API
上传文件
上传文件以便在之后的 API 调用中引用:
uploaded = client.files.upload(
file=("document.pdf", open("/path/to/document.pdf", "rb"), "application/pdf"),
)
file_id = uploaded.id
print(file_id)上传文件的响应包括:
{
"id": "file_011CNha8iCJcU1wXNR6q4V8w",
"type": "file",
"filename": "document.pdf",
"mime_type": "application/pdf",
"size_bytes": 1024000,
"created_at": "2025-01-01T00:00:00Z",
"downloadable": false,
"expires_at": null
}对于您上传的文件,downloadable可查看包含 API 参考文档链接的预览——按 Tab 键直到焦点进入卡片,按 Escape 键返回。 为 false。只有由技能或代码执行工具创建的文件才能被下载。请参阅下载文件。
API 参考描述了文件对象的每个字段。
在消息中使用文件
上传后,通过将上传响应中的 id 作为 file_id 传递来引用该文件:
response = client.messages.create(
model="claude-opus-5-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "Please summarize this document for me."},
{
"type": "document",
"source": {
"type": "file",
"file_id": file_id,
},
},
],
}
],
)
print(response)文件类型和内容块
Files API 支持不同的文件类型,它们对应不同的内容块类型:
| 文件类型 | MIME 类型 | 内容块类型 | 用例 |
|---|---|---|---|
application/pdf | document | 文本分析、文档处理 | |
| 纯文本 | text/plain | document | 文本分析、处理 |
| 图像 | image/jpeg, image/png, image/gif, image/webp | image | 图像分析、视觉任务 |
| 数据集及其他(请参阅上传并分析您自己的文件) | 各不相同 | container_upload | 数据分析、可视化 |
文档块
对于 PDF 和文本文件,使用 document 内容块:
{
"type": "document",
"source": {
"type": "file",
"file_id": "file_011CNha8iCJcU1wXNR6q4V8w"
},
"title": "Document Title", // Optional
"context": "Context about the document", // Optional
"citations": { "enabled": true } // Optional, enables citations
}图像块
对于图像,使用 image 内容块:
{
"type": "image",
"source": {
"type": "file",
"file_id": "file_011CPMxVD3fHLUhvTqtsQA5w"
}
}容器上传块
要将文件发送给代码执行工具,请使用 container_upload 内容块:
{
"type": "container_upload",
"file_id": "file_011CNha8iCJcU1wXNR6q4V8w"
}处理其他文件格式
对于 document 块不支持的文件类型(例如 .docx 和 .xlsx),请将文件转换为纯文本,并将内容直接包含在您的消息中。本身已是纯文本的文件(例如 .csv 和 .md 文件)既可以按这种方式读取,也可以通过 Files API 以显式的 text/plain 内容类型上传。如果要分析数据集而不是将其作为文本读取,请使用 container_upload 块将其上传给代码执行工具(请参阅上传并分析您自己的文件)。
以下示例读取一个文本文件并将其内容作为纯文本发送:
client = anthropic.Anthropic()
# 读取文本文件
with open("document.txt") as f:
text_content = f.read()
response = client.messages.create(
model="claude-opus-5-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": f"Here's the document content:\n\n{text_content}\n\nPlease summarize this document.",
}
],
}
],
)
for block in response.content:
if block.type == "text":
print(block.text)管理文件
列出文件
检索您已上传文件的列表。该端点支持分页:每个请求最多返回 limit可查看包含 API 参考文档链接的预览——按 Tab 键直到焦点进入卡片,按 Escape 键返回。 个文件(默认为 20,最多为 1,000),将响应中的 next_page可查看包含 API 参考文档链接的预览——按 Tab 键直到焦点进入卡片,按 Escape 键返回。 游标作为 page可查看包含 API 参考文档链接的预览——按 Tab 键直到焦点进入卡片,按 Escape 键返回。 参数传回即可获取下一页。文件按从新到旧的顺序排列。请参阅列出文件 API 参考可查看包含 API 参考文档链接的预览——按 Tab 键直到焦点进入卡片,按 Escape 键返回。。SDK 会返回第一页,并提供自动分页辅助工具。
client = anthropic.Anthropic()
files = client.files.list()
print(files)若要在一个请求中检查一组已知文件而不是分页,请将最多 100 个文件 ID 作为 ids[] 查询参数传递。ids[] 请求始终返回单个页面(next_page 为 null),任何无法解析为您工作区中文件的 ID 都会从 data 中被静默省略;请将返回的 ID 与请求的 ID 进行比较以检测缺失项。ids[] 不能与 page 或 limit 组合使用。
获取文件元数据
检索特定文件的信息:
file = client.files.retrieve_metadata(file_id)
print(file)删除文件
从您的工作区中删除文件:
client.files.delete(file_id)下载文件
下载由技能或代码执行工具创建的文件。您上传的文件无法下载。生成文件的 file_id 出现在创建它的 Messages 响应的 bash_code_execution_tool_result 内容块中:
file_content = client.files.download(file_id)
file_content.write_to_file("downloaded_file.txt")在 Claude API 上,Claude 通过代码执行工具生成的受支持图像、视频和音频文件(包括由技能创建的文件)在您下载时会带有已签名的 C2PA 内容凭证(Content Credentials)。有关凭证包含的内容以及如何验证凭证,请参阅生成文件上的内容凭证。
文件存储和限制
存储限制
- 最大文件大小: 每个文件 500 MB
- 总存储空间: 每个组织 1 TB
文件生命周期
- 文件的作用范围限定于上传时所在的工作区。同一工作区中的任何请求都可以引用它们;切勿接受来自不受信任来源的文件 ID(请参阅工作区访问警告)。
- 文件上传后无法修改或重命名。要更改文件内容,请上传新文件并删除旧文件。
- 文件会一直保留,直到您使用
DELETE /v1/files/{file_id}端点将其删除,或到达其expires_at时间。 - 已删除的文件无法恢复。
- 文件在删除后不久即无法通过 API 访问,但它们可能仍存在于进行中的 Messages API 调用及相关的工具使用中。
- 用户删除的文件将根据 Anthropic 的数据保留政策进行删除。
文件过期
要让文件自动过期,请在上传时包含 expires_in_seconds可查看包含 API 参考文档链接的预览——按 Tab 键直到焦点进入卡片,按 Escape 键返回。 表单字段。该值为介于 3,600(1 小时)到 7,776,000(90 天)之间的整数秒数。生成的 expires_at可查看包含 API 参考文档链接的预览——按 Tab 键直到焦点进入卡片,按 Escape 键返回。 时间戳(RFC 3339)会出现在每个文件响应中,对于上传时未设置过期时间的文件,其值为 null。过期时间在上传时一次性设置,之后无法更改。
当文件到达其 expires_at 时:
- 下载其内容(
GET /v1/files/{file_id}/content)会返回 404 错误。 - 引用该文件的 Messages 请求会在推理之前失败。
- 其元数据(
GET /v1/files/{file_id})在最多 30 天内仍可读取,此时expires_at为过去的时间。 - 在此期间,它会继续出现在列表响应中;请将
expires_at与当前时间进行比较以过滤掉已过期的文件。
使用 DELETE /v1/files/{file_id} 删除已过期的文件会立即移除其元数据,而无需等待 30 天窗口期结束。
审计日志
如果您的组织启用了 Compliance API,其活动源(Activity Feed)会记录使用 Claude API 密钥或从 Claude Console 进行的 Files API 操作:每次上传(POST /v1/files)、内容下载(GET /v1/files/{file_id}/content)和删除(DELETE /v1/files/{file_id})分别显示为 platform_file_uploaded、platform_file_content_downloaded 或 platform_file_deleted 活动。列出文件和检索文件元数据不会被记录。在 Compliance API 关闭期间发生的操作不会被记录,且之后无法恢复,因此在依赖此审计记录之前,请先设置 Compliance API。在 Claude Platform on AWS 上,请改用 AWS CloudTrail 数据事件来审计文件操作。
从 files-api-2025-04-14 迁移
Files API 已结束 beta 阶段,不再需要 beta 标头。从 files-api-2025-04-14 迁移是可选的:发送该标头的请求会继续正常工作并继续返回 beta 响应结构,因此现有集成在您更改之前会一直正常工作。移除该标头会将这些请求切换为本页所记录的结构:
使用 files-api-2025-04-14 | 不使用该标头 | |
|---|---|---|
| 列表响应 | { data, has_more, first_id, last_id } | { data, next_page };将 next_page 作为 page 查询参数传回 |
| 列表游标 | before_id、after_id | page,或最多 100 个 ids[](before_id 和 after_id 返回 400 错误) |
文件对象上的 expires_at | 不返回 | 始终存在;当文件没有过期时间时为 null |
上传文件部分的 Content-Type | 必需 | 可选;省略时会自动检测类型 |
迁移步骤:
- 移除 beta 请求头。 从您的请求中删除
anthropic-beta: files-api-2025-04-14。使用 SDK 时,请调用client.files而不是client.beta.files;继续使用client.beta.files仅在不再发送该请求头的 SDK 版本上有效。较早的版本即使在您未传入任何 beta 名称时,也会从client.beta.files发送该请求头。 - 更新分页。 将
after_id/before_id循环替换为page/next_page游标,或使用管理文件中展示的 SDK 自动分页辅助工具。 - 读取
expires_at。 该字段仅在不使用该标头时出现;null表示文件没有过期时间(请参阅文件过期)。
SDK beta 命名空间
从 Python SDK 1.2.0、TypeScript SDK 0.122.0、Go SDK 1.68.0、Java SDK 2.59.0、PHP SDK 0.45.0、Ruby SDK 1.67.0 和 C# SDK 12.44.0 开始,client.beta.files 不再发送 files-api-2025-04-14,并返回与 client.files 相同的结构,类型名称带有 Beta 前缀(在 PHP 中为 Anthropic\Beta 命名空间中的类)。对于处于 beta 阶段的 Files 功能,它通过 betas 接收 beta 名称,例如在 Managed Agents beta 请求头下的 scope_id 过滤。较早的 SDK 版本的类型对应 beta 结构;如果您依赖这些类型,请在迁移之前继续使用较早的版本。
携带 anthropic-beta: managed-agents-2026-04-01 但不携带 files-api-2025-04-14 的请求会收到本页所述的结构,并在 GET /v1/files 上有一项兼容性便利:before_id 和 after_id 仍被接受(不能与 page 或 ids[] 组合使用),且列表响应除 next_page 外还包含 has_more、first_id 和 last_id。更高版本的 Managed Agents beta 会收到普通结构。
错误处理
使用 Files API 时的常见错误包括:
- 文件未找到(404): 指定的
file_id不存在,或者您无权访问它。 - 无效的文件类型(400): 文件类型与内容块类型不匹配(例如,在文档块中使用图像文件)。
- 不可下载(400): 您上传的文件具有
"downloadable": false,无法下载。只有由 skills 或代码执行工具创建的文件才能被下载。 - 超出上下文窗口大小(400): 文件大于上下文窗口大小(例如,在
/v1/messages请求中使用 500 MB 的纯文本文件)。 - 无效的文件名(400): 文件名不符合长度要求(1–255 个字符),或包含禁用字符(
<、>、:、"、|、?、*、\、/或 Unicode 字符 0–31)。 - 文件过大(413): 文件超过 500 MB 的限制。
- 超出存储限制(400): 您的组织已达到 1 TB 的存储限制。
{
"type": "error",
"error": {
"type": "not_found_error",
"message": "File `file_011CNha8iCJcU1wXNR6q4V8w` not found."
},
"request_id": "req_011CQFYcrRp7mCHLDsAYT8Qt"
}使用和计费
Files API 操作是免费的:
- 上传文件
- 下载文件
- 列出文件
- 获取文件元数据
- 删除文件
在 Messages 请求中使用的文件内容按输入令牌计费。
速率限制
与文件相关的 API 调用限制为每分钟约 500 个请求。如需申请更高的限制,请联系销售。
后续步骤
可用性
Files API在所有模型上可用。
API 支持
用法
在 document、image 或 container_upload 块中通过 file_id 引用已上传的文件。
- Claude API
- Claude Platform on AWS
- Claude Models on Google CloudAnthropic managed
- Microsoft FoundryHosted on Anthropic
用法
将已上传的文件作为会话资源挂载到会话的沙箱中(只读,位于 /mnt/session/uploads 下),或在 user.message 事件的 image 或 document 块中引用 file_id。智能体写入 /mnt/session/outputs/ 的文件可以通过 Files API 下载。
- 所有支持的平台
数据处理
数据处理概览适用的端点
/v1/files
文件会一直保留,直到被显式删除或达到其配置的过期时间。 了解更多
此页面对您有帮助吗?