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 條評論

登入 後參與評論

還沒有評論,來搶沙發~