Claude Platform Docs
Messages处理文件

Files API

上传文件一次,即可在 Messages 请求中通过 file_id 引用它们,并下载由 skills 或代码执行工具创建的输出。

用法因产品而异

Messages API
在 document、image 或 container_upload 块中通过 file_id 引用已上传的文件。
Managed Agents
将文件挂载到会话的沙箱中,或在 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)

上传文件的响应包括:

Response
{
  "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 参考描述了文件对象的每个字段。

FileMetadata object{ type: "file", id, created_at, 5 more }
type: "file"

Object type.

For files, this is always "file".

id: string

Unique object identifier.

The format and length of IDs may change over time.

created_at: string

RFC 3339 datetime string representing when the file was created.

formatdate-time
filename: string

Original filename of the uploaded file.

minLength1
maxLength500
mime_type: string

MIME type of the file.

minLength1
maxLength255
size_bytes: number

Size of the file in bytes.

minimum0
downloadable: optional boolean

Whether the file can be downloaded.

defaultfalse
expires_at: optional string or null

RFC 3339 datetime string representing when the file will expire and become unavailable for download. Null if the file does not expire. For files uploaded with expires_in_seconds, this is the upload time plus that value.

formatdate-time

在消息中使用文件

上传后,通过将上传响应中的 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 类型内容块类型用例
PDFapplication/pdfdocument文本分析、文档处理
纯文本text/plaindocument文本分析、处理
图像image/jpeg, image/png, image/gif, image/webpimage图像分析、视觉任务
数据集及其他(请参阅上传并分析您自己的文件)各不相同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_idpage,或最多 100 个 ids[](before_id 和 after_id 返回 400 错误)
文件对象上的 expires_at不返回始终存在;当文件没有过期时间时为 null
上传文件部分的 Content-Type必需可选;省略时会自动检测类型

迁移步骤:

  1. 移除 beta 请求头。 从您的请求中删除 anthropic-beta: files-api-2025-04-14。使用 SDK 时,请调用 client.files 而不是 client.beta.files;继续使用 client.beta.files 仅在不再发送该请求头的 SDK 版本上有效。较早的版本即使在您未传入任何 beta 名称时,也会从 client.beta.files 发送该请求头。
  2. 更新分页。 将 after_id/before_id 循环替换为 page/next_page 游标,或使用管理文件中展示的 SDK 自动分页辅助工具。
  3. 读取 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 的存储限制。
Output
{
  "type": "error",
  "error": {
    "type": "not_found_error",
    "message": "File `file_011CNha8iCJcU1wXNR6q4V8w` not found."
  },
  "request_id": "req_011CQFYcrRp7mCHLDsAYT8Qt"
}

使用和计费

Files API 操作是免费的:

  • 上传文件
  • 下载文件
  • 列出文件
  • 获取文件元数据
  • 删除文件

在 Messages 请求中使用的文件内容按输入令牌计费。

速率限制

与文件相关的 API 调用限制为每分钟约 500 个请求。如需申请更高的限制,请联系销售。

后续步骤

使用 Claude 处理 PDF。从您的文档中提取文本、分析图表并理解视觉内容。

在沙盒容器中运行 Python 和 Bash 代码,以分析数据、生成文件并迭代改进解决方案。

处理和分析视觉输入,并从图像生成文本和代码。

可用性

Files API在所有模型上可用。

API 支持

用法

在 document、image 或 container_upload 块中通过 file_id 引用已上传的文件。

状态可用
云平台

用法

将已上传的文件作为会话资源挂载到会话的沙箱中(只读,位于 /mnt/session/uploads 下),或在 user.message 事件的 image 或 document 块中引用 file_id。智能体写入 /mnt/session/outputs/ 的文件可以通过 Files API 下载。

状态可用
云平台
  • 所有支持的平台

数据处理

数据处理概览

适用的端点

  • /v1/files
零数据保留不具备资格

文件会一直保留,直到被显式删除或达到其配置的过期时间。 了解更多

HIPAA不具备资格

此页面对您有帮助吗?