功能定位:消息过期≠云端永久保存

Letstalk IM 的「定时焚毁」与「单文件≤5 GB 云盘」是两条独立逻辑:前者在聊天流里产生「过期失效」提示,后者在「文件」标签页内长期留存。若对方直接拖入聊天而非先上传到云盘,一旦触发焚毁或到达管理员设定的保留天数,附件索引会被服务器端强制清除,客户端仅保留本地缓存。理解这一点,就能判断哪些场景还有救、哪些只能让发件人重发。

功能定位:消息过期≠云端永久保存
功能定位:消息过期≠云端永久保存

先判断:附件到底存在哪一层

打开会话 → 点击右上角「⋮」→ 消息管理 → 资源占用,能看到「本地」「云盘」「已失效」三个页签。若文件列在「已失效」且大小显示 0 B,说明服务器端索引已删除;若仍有体积数字,只是被客户端隐藏,可尝试「重新下载」。此检查在 Android/iOS/桌面端路径一致,区别仅在桌面端把「资源占用」放在「设置→数据与存储」子菜单。

场景示例:跨国项目合同 PDF

A 同事在 1 月 3 日直接把 18 MB 合同拖进群组,管理员设定了 30 天自动焚毁。你在 4 月 4 日才想起下载,此时消息已显示「附件已过期」。进入「资源占用」发现文件大小为 0 B,证明服务器侧已清理,只能走本地缓存或发件人重发,无法通过任何「隐藏入口」再次拉取。

本地缓存抢救:三平台操作差异

Letstalk 在本地使用分片加密存储,文件未手动清理前,仍可能躺在沙盒目录。注意:端到端加密环境下,缓存被密钥包裹,直接复制出文件后无法打开,必须通过客户端「重新导出」功能解密。

Android(原生 13 及以上)

  1. 设置 → 数据与存储 → 本地缓存 → 长按目标文件 → 导出到下载目录。
  2. 若列表为空,回到系统设置 → 应用 → Letstalk → 存储 → 清除缓存,再次启动 App,触发「缓存重建」索引,约数十秒后重新进入上一步菜单,文件可能重新出现(经验性观察:重建成功率约 30%,与碎片整理时机有关)。

iOS(16 及以上)

  1. 会话内点击「已失效」附件 → 弹出「尝试本地恢复」按钮(仅当本地仍留存加密分片时出现)。
  2. 恢复后自动解密并写入「文件」App → On My iPhone → Letstalk Recovery;若按钮灰色,说明分片已被系统清理,无法继续。

桌面端(Windows/macOS 截至当前的最新版本)

  1. 右上角「⋮」→ 设置 → 高级 → 打开调试文件夹 → 进入 CacheFragments 目录。
  2. 按文件名后缀过滤「*.blob」,找到与过期日期匹配的分片(时间戳在文件名内)。
  3. 回到客户端 → 设置 → 隐私 → 手动导入加密分片 → 选择对应 blob → 输入会话密钥(即群组二维码里的那串字符)→ 导出为明文文件。
注意:本地缓存抢救仅对「未手动清空缓存」且「未卸载重装」的设备有效;一旦卸载,加密分片随沙盒一起被系统擦除,无法逆向。

发件人端重发:合规留痕的最短路径

若本地缓存已灭失,最合规、最省时的办法是让发件人在「云盘」里找回原文件后重新分享。对企业租户,管理员可在后台审计日志里定位到该文件的上传记录,确保二次分发不违反 GDPR「目的限制」原则。

操作步骤(发件人视角)

  1. 进入「云盘」→ 我上传的 → 按文件名搜索。
  2. 勾选后点击「重新分享」→ 选择原会话或新会话 → 关闭「定时焚毁」或把天数调大。
  3. 若文件大于 200 MB,建议先开启「仅云盘链接」模式,减少聊天流重复上传耗时。

示例:DAO 财务报告二次披露

某 DAO 社区在 2 月 15 日上传了 2025Q4 财务报告并设定 7 天焚毁。3 月 20 日审计公司需要原件,财务负责人直接在云盘搜索「Q4_Fin」,点击「重新分享」到「审计临时频道」,关闭焚毁,审计方在 30 秒内完成下载,全程留痕可供治理委员会复查。

提前备份:企业数据驻留 API 导出

对必须满足 ISO-27041 或《GDPR 2026 修正草案》的组织,建议把「过期前」作为时间节点,用 Letstalk 企业版开放的「数据驻留切换」API 把指定会话的全部附件批量导出到本地 MinIO 或 AWS S3 兼容桶。该 API 支持按会话 ID、时间范围、文件类型三维度过滤,并自动附带 SHA-3 校验值,方便后续审计比对。

提前备份:企业数据驻留 API 导出
提前备份:企业数据驻留 API 导出

最小可用脚本(Python 3.11 示例)

import os, requests
SESSION_ID = 'g_1234567890'
TOKEN = os.getenv('LT_ENTERPRISE_TOKEN')
params = {'session_id': SESSION_ID, 'before_ts': 1704067200, 'type': 'file'}
r = requests.get('https://api.letstalk.im/v2/export/attachments', 
                 headers={'Authorization': f'Bearer {TOKEN}'}, params=params)
print(r.headers['X-Export-Location'])  # 返回一次性下载 URL,24 h 内有效
提示:导出文件默认使用 AES-256-CTR 二次加密,密钥通过企业主密钥信封加密后随包返回,需在本地 HSM 解密,防止传输途中泄露。

例外与取舍:什么时候不该折腾

1. 群聊已开启「国密算法」且启用「量子保险箱」时,本地缓存分片使用 ML-KEM 封装,桌面端手动导入功能会被禁用,只能走发件人重发。

2. 若文件涉密等级为「绝密」并启用「本地机房」模式,服务器端早已设置「零落地」策略,任何导出 API 都会返回 403,此时只能让发件人通过线下加密 U 盘二次传递。

3. 当客户端版本低于 7.4.0,缓存重建索引功能缺失,手动导入按钮不会显示,建议先升级再操作。

故障排查:现象→原因→验证→处置

现象 1:点击「重新下载」立即提示「网络异常」

可能原因:服务器端索引已删,但客户端缓存的 UI 状态未刷新。验证:同一账号在 Web PWA 打开同一会话,若也显示「附件已过期」,可确认服务器侧无文件。处置:放弃重新下载,转本地缓存或发件人重发。

现象 2:本地导出按钮灰色,无法点击

可能原因:iOS 低电量模式启用了「自动清理」且磁盘剩余空间低于 1 GB,系统已提前清除加密分片。验证:系统设置 → 通用 → iPhone 存储 → 最近删除,若找不到 Letstalk 相关条目,则分片被永久擦除。处置:让发件人重发,或从企业备份桶拉取。

适用/不适用场景清单

场景是否建议本地抢救理由
群聊 20 人以内,文件<50 MB,未开焚毁直接让发件人重发更快
企业合规审计,需留痕 10 年必须用数据驻留 API 提前导出
野外无网络,仅本地缓存可救命卫星离线模式只能读本地
国密+量子保险箱双开桌面端导入被禁用

最佳实践决策表

  1. 文件重要且仅一份 → 发件人上传云盘并关闭焚毁。
  2. 文件需合规留档 → 提前用数据驻留 API 导出,SHA-3 校验后存 MinIO。
  3. 文件已过期且本地无缓存 → 直接请求重发,别浪费时间找「隐藏入口」。
  4. 文件涉密且启用国密 → 本地抢救按钮被强制禁用,走线下加密传递。

FAQ:Letstalk 附件过期恢复常见疑问

为什么官方不提供「回收站」?

端到端加密设计下,服务器仅保存加密分片且无用户私钥,官方无法解密,也就无法提供全局回收站。企业版通过「数据驻留 API」让租户自行导出,满足合规同时保持「平台不碰明文」原则。

本地缓存重建会泄露隐私吗?

重建过程只在 Secure Enclave 或 TPM 内解密索引,明文不会落盘;重建完成后,客户端会回写新的加密索引,旧碎片被覆盖,经验性观察未出现可恢复残留。

数据驻留 API 导出太慢怎么办?

可缩小时间范围或使用「分片并发」参数(max_concurrency=8),官方白皮书显示 100 GB 数据在 1 Gbps 专线环境下约 1 小时完成;若走公网,速度取决于出口带宽与目标桶地理位置。

量子保险箱会降低恢复成功率吗?

不会。量子保险箱只改变密钥封装算法,不改变本地缓存生命周期;但桌面端手动导入功能会被禁用,导致「本地抢救」路径不可行,需提前用数据驻留 API 导出。

免费版能用数据驻留 API 吗?

不能。该接口仅对企业版租户开放,且需要在后台完成域名验证与合规问卷;免费版用户只能在过期前手动下载或让发件人重发。

收尾:把「过期」当流程而非意外

Letstalk 的附件过期机制本质是「默认不留痕」的隐私设计,而非「丢失」。真正需要长期留档的组织,应把「数据驻留 API 定时导出」写进 SOP;个人用户则养成「收到即转存云盘」习惯。真遇到过期,先冷静判断「索引是否还在」,再按「本地缓存→发件人重发→企业备份」顺序执行,可最大限度减少无谓折腾。下一步,不妨检查自己所在群聊的焚毁设定,把重要文件提前搬到云盘,给未来的自己留一条可验证的取证通道。