在 OkFile 中实现文件阅后即焚:一次性链接的接入与失效控制

简介: 本文记录在 OkFile 中增加文件阅后即焚能力的实现过程,包括上传页、CLI、API 三种接入方式,以及直链、下载页、预览页的一次性失效设计和缓存处理。

很多文件分享场景并不需要长期可访问,而是更接近“一次性交付”。例如给协作者临时看一个调试文件、发送一次性账单截图,或者给自动化流程传递一次性输入。这类场景里,普通对象存储更像“长期保存”,而不是“读完即失效”。

最近我在 OkFile 里补了一次文件阅后即焚能力,目标很直接:只要有人第一次成功读取到文件内容,这个文件对象和公开链接就立即失效,而不是等固定时间后过期。

1. 这次实现的目标

这里的“阅后即焚”不是简单的短期过期,也不是只限制下载次数,而是把语义收紧到:

  • 第一次成功读取内容后立即失效
  • 后续再次访问直接返回过期结果
  • 直链、下载页、预览页都遵守同一套失效模型

对应到接口层,上传时只需要增加一个参数:

{
   
  "burnAfterRead": true
}

2. 三种接入方式

2.1 上传页面

手动上传页增加了 Burn after read 选项。勾选后,上传成功返回的普通访问链接、下载链接和预览链接都会进入一次性消费模式。

这个入口适合临时手工分享文件,不需要额外写脚本。

2.2 CLI

CLI 增加了 --burn-after-read 参数,例如:

okfile upload secret.pdf --burn-after-read

如果是通过 Python 入口执行,也可以:

py -3 -m okfile_cli upload secret.pdf --burn-after-read

2.3 API

文件上传的两条路径都支持这个参数。

小文件可以直接走 quick upload:

curl -X POST "https://www.okfile.com/api/upload/quick" \
  -F "file=@secret.pdf" \
  -F "burnAfterRead=true"

如果是大文件或需要自己控制上传过程,也可以在 prepare 阶段声明:

curl -X POST "https://www.okfile.com/api/upload/prepare" \
  -H "Content-Type: application/json" \
  --data '{
    "filename": "secret.pdf",
    "size": 12345,
    "contentType": "application/pdf",
    "burnAfterRead": true
  }'

3. 三类链接如何统一失效

上传完成后,系统通常会返回三类入口:

  • url:直接文件访问入口
  • downloadUrl:受控下载入口
  • playUrl:图片、视频、PDF 等预览入口

真正需要保证的是,这个文件只允许首次成功读取一次。也就是说,只要打开 /i/{id}、下载 /d/{id},或者访问 /i/{id}?play=1 并成功拿到预览内容,这个文件就应该立即作废,后续其余入口也要一起失效。

4. 预览页是一处容易出错的地方

这次实现里,最容易踩坑的不是直链,而是预览页。因为预览页本身通常只是一个 HTML 壳,真正的文件内容会由页面内部再去请求媒体资源。如果只让后端在原始文件链路上删除对象,而不处理预览页本身,就会出现两个问题:

  • 预览页还能反复打开,看起来像没失效
  • 浏览器可能把第一次成功返回的媒体内容缓存下来

为了解决这个问题,后面补了两层控制:

4.1 一次性预览令牌

playUrl 不再只是静态预览壳页,而是会在首次访问时发出一次性媒体令牌。令牌成功消费后,再次打开预览页会直接命中过期状态。

4.2 强制禁用缓存

对于一次性文件的预览响应和原始内容响应,增加了更严格的缓存控制,例如:

Cache-Control: private, no-store, max-age=0
Pragma: no-cache
Expires: 0

5. 最终行为

现在统一后的行为可以概括为:

  • GET /i/{id}:第一次成功读取后失效
  • GET /d/{id}:第一次成功下载后失效
  • GET /i/{id}?play=1:第一次成功预览后失效

后续再次访问时,返回的是过期结果,而不是继续返回原始文件内容。

6. 适用场景与边界

比较适合的场景包括:

  • 临时分享敏感文档
  • 给外部协作者查看一次性文件
  • 给 Agent 或自动化任务传递一次性输入
  • 希望缩短链接被转发后的暴露窗口

如果需求更接近“可控访问,但不是一次性”,更适合走过期时间或最大下载次数这类控制方式。

7. 小结

这次改动表面上只是增加了一个 burnAfterRead 参数,但真正需要补齐的是上传页、CLI、API 如何统一暴露这个能力,以及直链、下载页、预览页如何统一失效语义。把这些问题一起补完之后,阅后即焚才更接近真正可用的一次性文件链接,而不是一个只在部分路径上生效的布尔开关。

目录
相关文章
|
20天前
|
数据采集 人工智能 分布式计算
多Agent集群中的"情报官"设计:为什么系统需要一个RDD
在多Agent系统中,信息采集环节的失误往往是级联错误的根源。本文从行业实践和学术研究两个维度,论证了专职情报采集Agent的必要性,并详细解析了枢衡RDD(资源探测)的五大架构设计原则,包括与CAD的对抗性协作机制等。最后提供了一套可落地的自检清单,帮助开发者判断自己的Agent集群是否需要引入专职情报官角色。
|
20天前
|
监控 网络协议 Go
装在内核里的透视镜:云监控 2.0 不改一行代码实现全栈可观测
基于Opentelemetry 无侵入探针,无需改代码、跨语言自动产出符合 OTel 标准的 trace 与 metrics。覆盖 HTTP、gRPC、MySQL、Redis、Kafka、CUDA 等 15+ 协议,并原生支持 OpenAI、通义千问等 GenAI 调用追踪,在云监控2.0 实现可以实现一键接入使用。
435 130
|
20天前
|
人工智能 运维 安全
工单闭环从半天到 6 分钟:我们把 AI Agent 编进了组织架构
我们以云原生应用部门为试验田,用商业化产品 AgentTeams 落地一支"数字员工小分队",让它们承接日常研发、工单答疑、开源维护与运营等业务,把原本人肉串联的协作流程,做成 AI Native 的工作方式。
499 134
|
20天前
|
JSON 自然语言处理 Shell
GLM 5.2 API 接入与部署实战:MIT 开源权重配置及百万上下文能力测试
智谱的 GLM 5.2 已经正式开放:Z.ai 的 Coding Plan API、Hugging Face 上的 MIT 开源权重、以及 20 多个第三方 coding 工具的支持,全部同步上线,不再是"下周见"。更关键的是这次发布带了真实跑分——不是 PPT 上的宣传,是能复现的 benchmark。 如果你之前因为"没有公开分数、权重还是占位仓库"而把它列进观望名单,现在可以把它划掉了。下面是接入路径:10 分钟跑通托管 API、Claude Code 一段配置切过去、以及想自托管时的本地部署实测数据。
|
20天前
|
网络协议 调度 数据安全/隐私保护
一个域名的双栖价值:从“永久茶”到“永久查”,开发者如何用阿里云为品牌托底
域名是品牌的心智入口。本文以一个能同时做茶品牌和查询平台的域名为例,解析拼音域名的“语义复用”价值——一音双业(茶饮/查询),兼具易记性与延展性;结合阿里云DNS实现轻量双入口部署,并延伸至短域名“yongjc.com”的组合保护策略,凸显域名作为数字资产的战略意义。
212 5
|
20天前
|
人工智能 自然语言处理 安全
多AI聚合的五个常见误区:你以为的“交叉验证”可能只是“重复犯错”
本文剖析多AI聚合系统五大常见误区:盲目追求数量、迷信“少数服从多数”、误信数据天然独立、将分歧视为缺陷、幻想彻底消除幻觉。强调模型独立性、分歧价值与用户主动判别才是发挥聚合效能的关键。
168 5
|
20天前
|
内存技术
STM32F103C8T6(Blue Pill) 上移植 USB 虚拟串口(CDC)
STM32F103C8T6(Blue Pill) 上移植 USB 虚拟串口(CDC)
328 4
|
20天前
|
人工智能 算法 安全
AI问答优化的本质:从“模型微调”到“认知校准”
企业AI问答优化的核心,不是训练模型“更聪明”,而是让企业内容被AI“正确理解”。关键在于提升内容可索引性、构建信源权威性、建立动态校准机制,使企业信息成为AI默认事实源,实现可持续的认知占位与流量转化。
|
20天前
|
人工智能 自然语言处理 自动驾驶
Goal × Loop搭配指南:长任务自动化落地老金给你讲明白!
本文直击AI使用误区:把“许愿”当“目标”。指出多数人失败源于goal模糊——无读者、无验收、无边界。提出可验收goal五要素(对象、结果、交付物、约束、验收标准),并给出文章、副业、AI助手三大场景的改写范例,辅以state管理、loop设计与prompt自举实操,助你从“求AI帮忙”迈向“精准协同”。
|
20天前
|
数据挖掘 API 数据中心
游戏工作室多开怎么防?IP离线库识别同一网段批量账号
游戏工作室防多开,难点不在设备伪装(如改IMEI),而在识别“假分散、真同源”——账号看似独立,实则共享同一出口IP、数据中心段或ASN。IP离线库通过`is_datacenter`、`asn`、`is_proxy`等维度毫秒画像,精准捕获网络层聚集性,误判率<0.5%,是风控源头可信锚点。(239字)