一个单用户文档二维码工具:
- 上传文件(PDF、图片、Office、文本等)或粘贴 URL
- 生成不可猜测的分享链接与高对比二维码
- 手机扫码后打开分享页:预览 / 下载 / 跳转
- 历史文档库:重新打开、复制链接、下载二维码 PNG、删除
- 每条分享可设置有效期(默认 7 天),过期自动清理
- 全中文界面,移动端友好
- 运行时:Cloudflare Workers
- 存储:
- R2:保存上传文件
- D1:保存文档元数据(名称、分享 ID、类型、时间等)
- 语言:TypeScript(应用代码全部为
.ts) - 包管理器:pnpm
需要 Node.js 20+(建议 20/22 LTS)
pnpm install
pnpm typegen
pnpm devpnpm dev使用wrangler dev- 本地地址通常是
http://127.0.0.1:8787
先登录 Wrangler(不会在代码里保存你的账号密钥):
pnpm wrangler login本项目 wrangler.jsonc 只声明了绑定名(不写死资源 ID),利用 Wrangler 的自动资源创建能力:
d1_databases: [{ "binding": "DB" }]r2_buckets: [{ "binding": "DOCS_BUCKET" }]
首次 pnpm deploy 时,Wrangler 会在你的账号中创建并绑定所需 D1/R2(需 Wrangler 版本支持自动创建)。
如需手动创建,可执行:
pnpm wrangler d1 create document-qr-db
pnpm wrangler r2 bucket create document-qr-files然后把命令输出里的数据库/桶信息填回 wrangler.jsonc 对应绑定。
pnpm buildpnpm build 实际执行的是 wrangler deploy --dry-run,用于检查 Worker 打包与配置。
pnpm deploy部署成功后会得到 Worker 的公网地址(*.workers.dev 或你绑定的自定义域名)。
二维码里编码的是分享链接 URL。
手机蜂窝网络能否打开,取决于这个 URL 是否公网可达。
- 本地
wrangler dev地址仅用于本地开发调试 - 生产请使用
pnpm deploy后的 Worker 公网地址 - 也就是说,扫码应指向部署后的 Worker URL
- 创建文档时可设置有效期:
- 1 小时 / 1 天 / 7 天(默认)/ 30 天 / 自定义日期时间 / 永不过期
- 到期后行为:
/s/<shareId>不再返回文档内容,而是显示“已过期/不可用”页面- 不再允许下载、预览、重定向
- 元数据会从 D1 删除,上传文件会从 R2 删除(不可恢复)
- 清理策略:
- 懒清理:访问到过期记录时立刻删除
- 定时清理:Worker Cron(
wrangler.jsonc中triggers.crons)每 15 分钟清理一次,避免无人访问时文件滞留
本地可手动触发 scheduled 处理器测试:
curl "http://127.0.0.1:8787/cdn-cgi/handler/scheduled?cron=*/15+*+*+*+*"pnpm install
pnpm typegen
pnpm typecheck
pnpm dev
pnpm build
pnpm deploy
pnpm check- 上传文件后:
- 文件写入 R2
- 元数据写入 D1
- 生成随机分享链接
/s/<shareId> - 记录该分享的到期时间
- 粘贴 URL 后:
- 元数据写入 D1
- 分享链接
/s/<shareId>访问时 302 跳转(未过期)
- 分享页:
- PDF / 图片:浏览器内预览
- 其他文件:展示下载入口
- 文档库:
- 历史记录持久化
- 一键复制链接
- 下载二维码 PNG
- 删除(同步删除 D1 记录;上传文件同时删除 R2 对象)