一句话结论
文件通过 HTTPS 上传,转换与压缩在服务器本地引擎内完成,不经过任何第三方在线转换服务;原始文件超过 1 小时即进入清理范围,由每小时运行一次的清理任务从磁盘删除;下载走限时签名链接,链接过期即失效;文件内容不用于模型训练,也不做人工查看。
文件从上传到删除的完整时间线
这是当前实际运行的保留策略,不是宣传口径。每一项都可以通过网络请求的响应头和页面上的提示核对。
| 阶段 | 存放位置 | 保留期 | 谁能访问 |
|---|---|---|---|
| 上传中 | 服务器临时目录 | 处理完成即删;每小时清理,超过 1 小时的文件必然被删 | 处理进程 |
| 转换 / 压缩中 | 服务器临时目录与内存 | 同上 | 处理进程 |
| 压缩结果缓存 | 服务器缓存目录 | 最长 10 分钟 | 生成它的那次请求 |
| 大文件云端中转 | 私有存储桶(ACL=private) | 最长 1 天 | 仅服务器账号,外部无法列举 |
| 下载链接 | 限时签名地址 | 最长 12 小时 | 持有该链接的人 |
| 登录用户的转换记录 | 账号数据库(仅文件名等元信息) | 在「我的文件」可自行删除 | 仅本人 |
| 页面访问日志 | 统计数据库 | 90 天 | 运维 |
存储是怎么隔离的
- 私有存储桶:大文件走云端中转时,存储桶权限设为 private,不是「有链接就能访问」的公开读。外部无法列出桶内对象,也不知道有哪些文件名。
- 签名链接只绑 GET:下载地址是服务端临时签发的,只能用于读取,不能上传、不能覆盖、不能列举。签名过期后即使有人保存了链接也打不开。
- 文件名不可猜:服务端保存的临时文件名是随机串,不是你上传时的原始文件名。即使知道别人的文件名,也无法拼出下载地址。
- 处理与存储分离:转换在服务器本地引擎里跑,文件不需要离开这台机器;只有超过直传阈值的大文件才走对象存储中转。
传输安全
全站强制 HTTPS,使用 TLS 1.2 / TLS 1.3,并启用 HSTS(浏览器会记住只走加密连接)。上传、处理、下载三个阶段都在同一条加密链路上,不存在明文传输的中间环节。
我们不做的事
- 不做人工查看:除非你主动反馈问题并授权我们排查具体某个文件,否则没有人会打开你的文件。
- 不用于模型训练:文件内容不进入任何训练语料,也不用于产品分析。
- 不卖给第三方:不向广告商、数据商或任何合作方提供文件内容。
- 不偷偷加标记:除你自己选择的水印功能外,不会在输出文件里嵌入隐藏标识。
处理是在哪跑的
转换与压缩都在服务器本地完成,用的是开源的文档处理引擎:Office 文档走 LibreOffice 转换,PDF 解析与页面操作走 PyMuPDF,压缩走 Ghostscript 与 PyMuPDF 双路径,图片处理走 sharp 与 Pillow。这些引擎运行在我们自己的机器上,文件不需要被转发到任何第三方的在线转换接口。
这样做有两个直接后果:一是文件不会因为「用了某个第三方 API」而多出一份副本;二是处理能力受本机资源限制,所以我们会对超大文件排队,而不是默默失败。
怎么判断一个在线 PDF 工具是否可信
这套标准可以用来审视我们,也可以用来审视任何同类工具:
- 有没有写清楚保留期:只说「安全」不说多久删除的,基本等于没承诺。要能看到具体时长。
- 下载链接是不是限时的:如果下载地址是固定的、可以长期访问的公开路径,说明文件可能长期躺着。
- 要不要强制注册才能看说明:连功能介绍都藏在登录后面,通常说明站点主要目的是收集账号。
- 存储桶权限是否可验证:把下载链接的域名单独打开看看,如果能看到目录列举,就是公开读权限。
- 是否声明不用于训练:尤其在 AI 工具泛滥之后,这一条值得单独确认。
账号与密码怎么存
密码使用 scrypt 加盐哈希后存储,数据库里没有明文密码,也没有可逆的加密副本。登录会话使用带时效的 token,退出登录即失效。注册需要邮箱验证码,避免用他人邮箱占位。
处理敏感文件,你还能多做这几件事
- 能本地处理就别上传:只做查看、打印、简单拆分时,用系统自带预览或本地软件更快也更稳妥。
- 先脱敏再上传:合同、简历、体检报告里的身份证号、手机号、银行卡号,可以先涂掉或删页再传。
- 用完删记录:在「我的文件」里删除对应记录,避免历史列表长期留着文件名。
- 别在公共网络传大文件:公共 WiFi 下即使有 HTTPS,也建议改用手机流量处理敏感文档。
- 下载完就关页面:签名链接不要转发到群里,链接在有效期内任何人拿到都能打开。