PocketChest:安全便捷的临时文件共享解决方案

无需账户,一键上传,安全分享——用短代码管理文件与文本的云端保险箱

为什么需要临时文件共享工具?

在日常工作中,我们经常面临这样的场景:

  • 需要给客户发送大型设计稿,但邮箱附件限制 20MB
  • 团队协作时需共享临时日志文件,但担心云盘链接长期暴露
  • 想给朋友传照片合集,却受限于聊天工具的文件大小限制

PocketChest 正是为解决这些问题而生。它像数字时代的“漂流瓶”,让文件在指定时间后自动消失,保障数据安全。


什么是 PocketChest?

核心概念:文件保险箱(Chest)

每个保险箱(Chest)相当于一个加密容器,您可存放:

  • 📁 任意类型文件(单个最大 200GB)
  • 📝 文本内容(如配置信息、临时密码)
    上传后系统生成 6 位短码(如 ABC123),接收方通过短码即可获取内容。

核心特性全景图

功能类别 具体实现 用户价值
安全控制 6 位随机短码 + TOTP 双重验证 防暴力破解
容量支持 分块上传技术 + Cloudflare R2 存储 200GB 大文件传输
生命周期 1/3/7/15 天或永久保存选项 灵活控制数据留存
访问控制 免注册 + 按需启用认证器验证 5 秒快速分享

技术架构揭秘(无代码版解读)

文件传输全流程

graph LR
A[用户上传] --> B(前端加密分块)
B --> C{是否大文件?}
C -->|是| D[分块存储至 R2]
C -->|否| E[直接存储]
D & E --> F[生成 6 位短码]
F --> G[接收方输入短码]
G --> H[自动组合下载]

三大核心技术组件

  1. 边缘网络加速
    Cloudflare 全球节点确保东京用户上传的文件,纽约用户 1 秒内可下载

  2. 自动清理机制
    每小时自动执行:

    for chest in database:
        if chest.expiry_time < now():
            delete_files(chest)  # 彻底删除文件
            remove_database_record(chest)  # 清除记录
    
  3. 安全防护体系

    • 短码碰撞防护:62^6 ≈ 568 亿种组合
    • TOTP 动态密码:每 30 秒更换验证码
    • JWT 令牌:每次操作独立授权

手把手实操指南

本地开发环境搭建(5 分钟完成)

步骤 1:配置文件初始化

# 后端配置
cp pocket-chest-backend/wrangler.jsonc.template pocket-chest-backend/wrangler.jsonc

# 前端配置
cp pocket-chest-frontend/.env.local.template pocket-chest-frontend/.env.local

步骤 2:双服务启动

# 启动后端服务(API 核心)
cd pocket-chest-backend
npm install
npm run dev  # 访问 http://localhost:8787

# 启动前端界面
cd pocket-chest-frontend
npm install
npm run dev  # 访问 http://localhost:3000

文件上传演示

上传示例
支持拖拽上传 + 实时进度显示

文件获取演示

获取示例
输入 6 位代码一键下载


真实场景应用案例

案例 1:设计师大文件交付

  • 痛点:3GB PSD 文件无法邮件发送
  • 解决方案

    1. 上传文件设置 7 天有效期
    2. 开启 TOTP 验证(客户需用 Google Authenticator 获取动态码)
    3. 微信发送短码:X3K9MN

案例 2:临时数据库备份共享

  • 痛点:DBA 需给开发团队共享调试数据
  • 操作流程

    1. 将 SQL 文件拖入上传区
    2. 选择”文本内容”添加操作说明
    3. 设置 24 小时自动销毁

案例 3:跨地区文档协作

  • 优势对比

    传统方式 PocketChest
    网盘链接需登录 直接短码访问
    手动清理文件 自动过期删除
    存储空间限制 200GB 单文件

技术实现细节(非开发者可跳过)

数据库设计精要

-- D1 数据库核心表结构
CREATE TABLE chests (
  id TEXT PRIMARY KEY,     -- 6位短码
  expiry_time INTEGER,     -- 精确到秒的时间戳
  totp_secret TEXT         -- 加密存储的TOTP密钥
);

CREATE TABLE files (
  chest_id TEXT REFERENCES chests(id),
  r2_key TEXT,             -- R2存储对象标识
  file_name TEXT           -- 原始文件名
);

大文件上传流程

  1. 前端将 5GB 视频切割为 100MB 的块
  2. 并行上传 50 个分块至 R2 存储
  3. 服务端记录分块序列
  4. 下载时自动按序重组

常见问题解答(FAQ)

Q1:短码会被猜出吗?

62 的 6 次方(约 568 亿)种组合,假设每秒尝试 1000 次,需 18 年才能遍历

Q2:文件真的会自动删除?

是的,系统通过两种机制保障:

  1. 定时任务每小时清理过期文件
  2. 访问时校验有效期(双保险机制)

Q3:TOTP 验证如何启用?

上传页面勾选”启用认证器保护”,用 Microsoft Authenticator 等 App 扫描二维码即可绑定

Q4:支持哪些文件类型?

无限制!包括但不限于:

  • 可执行文件 (.exe, .dmg)
  • 设计源文件 (.psd, .fig)
  • 媒体文件 (.mp4, .mov)

项目结构全景图

PocketChest/
├── 后端核心 pocket-chest-backend/
│   ├── 分块上传处理 src/multipart-upload.ts
│   ├── TOTP 验证引擎 src/auth/totp-validator.ts
│   └── 自动化测试 test/ 包含 32 个测试用例
│       ├── 200GB文件上传测试 multipart-upload.spec.ts
│       └── 短码冲突测试 retrieval.spec.ts
│
└── 前端界面 pocket-chest-frontend/
    ├── 动态表单组件 components/ExpirySelector.tsx
    ├── 进度条动画组件 UploadProgress.tsx
    └── 核心交互钩子 hooks/usePocketChest.ts

为什么选择自建而非商业服务?

三大核心优势

  1. 数据主权保障
    所有文件存储于自有 Cloudflare R2,无第三方审查

  2. 定制化扩展
    可根据需求修改:

    • 短码生成规则(如 8 位字母)
    • 文件保留策略(最长永久保存)
  3. 零成本运营
    Cloudflare 免费套餐包含:

    • 每日 10 万次 API 调用
    • 10GB 数据库存储
    • 每月 5GB R2 存储空间

部署指南详见 DEPLOYMENT.md,30 分钟完成全栈部署


最佳实践建议

安全使用准则

  1. 敏感文件必启用 TOTP
    (即使短码泄露仍需要动态密码)

  2. 有效期设置原则

    文件类型 推荐有效期
    合同文档 15天
    临时日志 24小时
    媒体素材 7天
  3. 短码传递方式

    • 优先使用即时通讯工具(微信/Slack)
    • 避免公开粘贴到论坛

项目已开源:[GitHub 仓库链接] · MIT 许可证 · 欢迎贡献代码

通过 PocketChest,您获得的不只是文件传输工具,更是可控的数据生命周期管理方案。从 1MB 的文本片段到 200GB 的影视素材,都能在安全、便捷、可控的前提下自由流转。