ChatGPT Project 导出缺少上传的文件

Data Export 给你的 zip 里只有 conversations.json 和 chat.html,传进 Project 的 PDF、图片都不在。正确的拿法是从 Library 或每个 Project 的 Files 面板里把文件本体下下来。

你点了 Settings → Data Controls → Export data,等到邮件、下载 zip——结果里面只有 conversations.jsonchat.html。传进 Project 的 PDF、图片、表格一个都找不到。这不是 bug,是设计如此:个人 Data Export 只导文本和元数据,上传的二进制文件存在另一个对象存储里,导出根本不打包它们。

最快的修法(截至 2026 年 6 月): 打开 chatgpt.com 侧边栏里的 Library,按类型筛选(PDFs、Documents、Spreadsheets、Images),然后下载文件——可以单个下,也可以批量下。Library 于 2026 年 3 月 24 日上线,现在是你所有上传文件的持久存储,所以导出漏掉的附件通常就在这里。如果某个 Project 比 Library 更早、或某个文件不在 Library 里,就进那个 Project 从它的 Files 面板下载。Team / Enterprise 的数据,个人导出永远碰不到工作区文件——得让管理员走 Compliance API 导出。

先判断你属于哪一类

现象大概率原因去看
zip 里只有 conversations.json + chat.html,没有 PDF/PNG导出按设计不含二进制修法 1(Library)/ 修法 2(逐 Project)
Library 里有这个文件,但导出里没有本就如此,拿错了恢复通道修法 1
一小时前刚传的文件到处都找不到还没同步 / 导出是某一刻的快照原因 3,然后重导
整个 Team 工作区的 chat 都没有,不光是文件个人导出读不到 Team 工作区修法 4(管理员导出)
明明是你上传的,却显示”工作区所有”文件归属 org,不归你修法 4
导出时间戳早于上传时间快照在文件存在之前就生成了重新触发导出

常见原因

按命中率从高到低。

1. 标准导出按设计就不含二进制上传

最常见。个人 Data Export 把 conversations、custom instructions、元数据打包成 conversations.json 加一个 chat.html 查看器。上传的二进制(PDF、PNG、XLSX、DOCX)存在另一个对象存储里,不进 zip。现在 OpenAI 的导出对大多数个人账号就只发这两个文件。

如何判断:解压 zip 搜 *.pdf*.png,搜不到 = 二进制按设计被排除了。

2. Project 文件在另一个界面里(Library 或 Files 面板)

自从 Library(2026 年 3 月 24 日)上线,大多数上传也会落进一个能从侧边栏打开的中心文件库。直接挂在 Project 上的文件,仍然出现在那个 Project 的 Files 面板里。这两个都不在 Data Export 范围内,而且至今没有”一键导出所有 Project + Files”的按钮。

如何判断Settings → Data Controls → Export data 只给你 chat;二进制要去 Library 拿,或走 Project → Files → 单文件 Download。

3. 刚上传不久的文件还没同步进去

如果你触发导出前不久才上传文件,那份快照可能不包含它,而且文件可能要几分钟才会出现在 Library 里。导出本身反映的是请求那一刻的状态。

如何判断:旧的 Project 文件出现(或元数据里有引用),但今早传的那份找不到。

4. 数据在 Team / Enterprise 工作区里却跑了个人导出

你跑了个人 Data Export,但 Project 其实在 Team 或 Enterprise 工作区里。个人导出只覆盖个人工作区的数据——OpenAI 已确认:工作区对话根本不能通过个人流程导出。

如何判断:Team 工作区里的 chat 也没在导出里,不光是文件。这说明你用错了导出通道。

5. 标记为”工作区所有”的文件跟 org 不跟你

Team / Enterprise 里某些文件归工作区不归你这个用户,即使是你上传的,个人导出也不会包含。

如何判断:Admin Console / Compliance 视图显示这些文件是 workspace-owned,而你的个人导出里没有。

6. 导出生成在文件存在之前

Data Export 抓的是请求那一刻的状态。第 1 天触发导出、第 3 天才传文件,那份 day-1 的 zip 里自然没有 day-3 的文件。注意:只有你最近一次导出请求会被处理,之前还在排队的请求会被自动取消。

如何判断:导出文件名时间戳早于上传时间。重新触发一次导出。

动手前先确认

  • 想清楚”完整”对你意味着什么:只要 chat、只要文件、还是两个都要——不同界面覆盖的范围不一样。
  • 列出你关心的文件分别在哪些 Project 里——可能要挨个跑,也可能把 Library 扫一遍就够了。
  • 确认订阅和工作区:Free / Go / Plus / Pro 的行为和 Team / Enterprise 管理员导出都不一样。

动手前值得先收集的信息:

  • 导出请求时间和邮件送达时间。
  • 订阅类型和工作区(个人 vs Team / Enterprise)。
  • 期望的文件(文件名、属于哪个 Project、上传日期)。
  • 期望内容和 zip 实际内容的 diff。
  • 这次是为合规、迁移还是个人留档——决定走哪条策略。

最短修复路径

按收益从高到低。修法 1 和 2 覆盖几乎所有个人备份需求。

修法 1:扫一遍 Library(最快)

Library 是你上传文件的持久存储,而且可以直接下载。

chatgpt.com → 侧边栏 → Library
  → 筛选:Documents / Spreadsheets / Presentations / PDFs / Images
  → 选中文件 → Download(单个或批量)
  → 存到 /backup/<project-name>/

截至 2026 年 6 月,Library 在 Plus、Pro、Business 上可用,并按 OpenAI 2026 年 5 月 14 日的 release notes 向 Free 和 Go(以及 EEA、瑞士、英国)扩展。个人账号有最多 10 GB 文件存储;Business / Enterprise 组织有最多 100 GB。如果你的订阅或地区还没有 Library,跳到修法 2。

修法 2:挨个 Project 从 Files 面板下载

直接挂在 Project 上的文件(或比 Library 更早的旧上传),从 Project 本身下载:

对每个 Project:
  打开 Project → Files 面板(project sources 列表)
  → 打开一个文件 → Download
  → 存到 /backup/<project-name>/

桌面和网页端都没给个人账号暴露批量下载 API。5-10 个 Project 手动下大约 15 分钟。50+ 看修法 6。

修法 3:单独保存 Project Instructions 和元数据

Instructions 在 JSON 导出里有,但当成 Markdown 留底更方便:

对每个 Project:
  打开 Project → Edit instructions → 复制文本
  → 存成 /backup/<project-name>/instructions.md
  → 同时记下 Project 名、创建日期、文件清单

需要的话能照着这个在别处重建 Project。

修法 4:Team / Enterprise 走管理员 / Compliance 导出

个人流程读不到工作区数据,所以由管理员通过 Compliance Platform 导出:

管理员 → Compliance Platform / Compliance API
  → 导出工作区数据(Conversations + Library 文件)
  → 结果以 JSONL 日志文件 + 文件本体形式交付

OpenAI 的 Compliance API 提供了 Library 专用的端点,用于导出(和删除)工作区文件;Compliance Logs Platform 则交付不可变、按时间窗口的 JSONL 导出。你没管理员权限的话,找工作区 owner 协调。

修法 5:chat 历史从 conversations.json 里解析

标准导出仍然在 conversations.json 里包含完整 chat 历史。重新解析把 Project 相关的 chat 抽出来:

import json

with open("conversations.json") as f:
    convos = json.load(f)

# 每条 conversation 有 conversation_id;Project 关联
# 可能在某个 metadata 字段里——先打印 keys 看一下。
for c in convos[:3]:
    print(c.keys())

按 Project 过滤,再把每条 chat 导成 Markdown。注意:JSON 里的内联图片 URL 指向外部 host 的资源、可能会失效——重要的东西趁还在的时候从 Library 下下来。

修法 6:50+ Project 的脚本绕路

个人 Plus 账号没有官方批量导出 API。可选绕路:

  • Library 批量下载(修法 1)——光这一招就能替掉大半的逐 Project 点击。
  • 用桌面自动化工具(Hammerspoon、AutoHotkey)驱动那些比 Library 更早的 Project 的 Files 面板。
  • Team / Enterprise 让管理员通过 Compliance API 跑一次程序化导出。
  • help.openai.com 提一个”一次性完整导出”的工单——迁移场景有时会被处理。

修法 7:长期备份就镜像到外部存储

别指望一次性导出。不能丢的文件这么做:

source-of-truth 模式:
  本地文件夹(或 Google Drive) → 上传进 ChatGPT
  → 永远不只在 ChatGPT 里编辑
  → 哪天失去账号访问,源副本还在

把 Library 和 Project Files 当工作缓存,不要当唯一来源。

怎么确认已经修好

删任何东西、取消任何订阅之前,先跑这一步验证:

对 /backup/<project-name>/ 里每个文件:
  - 打开看(PDF 阅读器、图片浏览器、表格软件)
  - 页数 / 尺寸和印象里的一致
  - 文件名和时间戳对得上 Library 或 Files 面板

“有但坏了”的备份比”知道没有”更糟糕。满足下面这些就算搞定:

  • 你清单里每个 Project 都有自己的备份文件夹,里面有文件和 instructions.md
  • 从备份里随机挑 3 份 PDF 打开——都能正常渲染。
  • 你关心的 chat 都以 Markdown / JSON 的形式存在,按 Project 名能找到。
  • Team / Enterprise:管理员导出的 manifest 列出来的文件数对得上。

常见坑

  • 以为个人 Data Export 是”完整版”——它是 conversations.json + chat.html,不是你的文件。
  • 忘了 Library:导出跳过的二进制,通常侧边栏点一下就到。
  • 触发导出之后又传了文件,期望旧 zip 能包含它。
  • 数据在 Team 工作区里却跑的是个人导出——走错通道。
  • 备份了文件引用(JSON 里的文件名)但没拿到二进制本体。
  • 让下载链接过期:邮件送达后 24 小时链接就失效,得重新触发导出才能拿到新链接。
  • 把一次性导出当永久备份——文件会变,重要 Project 要按周期重新导出。

FAQ

Q:Data Export 多久能到? A:个人账号一般几分钟,但 OpenAI 说大账号最多可能要 7 天。邮件里的下载链接 24 小时后失效,而且只有你最近一次请求会被处理(之前排队的会被取消)。

Q:导出里没有的话,我上传的文件去哪了? A:在 Library(chatgpt.com 侧边栏)里,或在原 Project 的 Files 面板里。导出从不携带二进制本体,只在元数据里引用它们。

Q:能单独导出某个 Project 的数据吗? A:标准导出不能直接做。从 Library 或那个 Project 的 Files 面板下载它的文件,再在 conversations.json 里过滤这个 Project 的 chat。

Q:对话里的图片会被导出吗? A:JSON 里有内联图片 URL,但二进制是外部 host 的、可能会失效。重要的图片从 Library 存一份,或者在 chat 还新鲜的时候就下下来。

Q:Custom GPT 的 Knowledge 文件能备份吗? A:打开那个 GPT → Configure → Knowledge,一个个下载。Knowledge 文件没有批量导出。

Q:取消订阅后文件会被删吗? A:失去工作区访问后文件就拿不到了,而且删除的 Project(连同它的 chat、文件、instructions)会在 30 天内清除。取消订阅前先备份,不要取消后再想起来。

相关阅读

标签: #ChatGPT #排查 #chatgpt-projects #data-export