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[自动组合下载]
三大核心技术组件
-
边缘网络加速
Cloudflare 全球节点确保东京用户上传的文件,纽约用户 1 秒内可下载 -
自动清理机制
每小时自动执行:for chest in database: if chest.expiry_time < now(): delete_files(chest) # 彻底删除文件 remove_database_record(chest) # 清除记录
-
安全防护体系
-
短码碰撞防护: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 文件无法邮件发送 -
解决方案: -
上传文件设置 7 天有效期 -
开启 TOTP 验证(客户需用 Google Authenticator 获取动态码) -
微信发送短码:X3K9MN
-
案例 2:临时数据库备份共享
-
痛点:DBA 需给开发团队共享调试数据 -
操作流程: -
将 SQL 文件拖入上传区 -
选择”文本内容”添加操作说明 -
设置 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 -- 原始文件名
);
大文件上传流程
-
前端将 5GB 视频切割为 100MB 的块 -
并行上传 50 个分块至 R2 存储 -
服务端记录分块序列 -
下载时自动按序重组
常见问题解答(FAQ)
Q1:短码会被猜出吗?
62 的 6 次方(约 568 亿)种组合,假设每秒尝试 1000 次,需 18 年才能遍历
Q2:文件真的会自动删除?
是的,系统通过两种机制保障:
定时任务每小时清理过期文件 访问时校验有效期(双保险机制)
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
为什么选择自建而非商业服务?
三大核心优势
-
数据主权保障
所有文件存储于自有 Cloudflare R2,无第三方审查 -
定制化扩展
可根据需求修改:-
短码生成规则(如 8 位字母) -
文件保留策略(最长永久保存)
-
-
零成本运营
Cloudflare 免费套餐包含:-
每日 10 万次 API 调用 -
10GB 数据库存储 -
每月 5GB R2 存储空间
-
部署指南详见 DEPLOYMENT.md,30 分钟完成全栈部署
最佳实践建议
安全使用准则
-
敏感文件必启用 TOTP
(即使短码泄露仍需要动态密码) -
有效期设置原则
文件类型 推荐有效期 合同文档 15天 临时日志 24小时 媒体素材 7天 -
短码传递方式
-
优先使用即时通讯工具(微信/Slack) -
避免公开粘贴到论坛
-
项目已开源:[GitHub 仓库链接] · MIT 许可证 · 欢迎贡献代码
通过 PocketChest,您获得的不只是文件传输工具,更是可控的数据生命周期管理方案。从 1MB 的文本片段到 200GB 的影视素材,都能在安全、便捷、可控的前提下自由流转。