2026-08-18:简历 PDF 接入宝塔外链下载
背景
博客的简历展示模块需要提供 PDF 下载,但简历文件包含较完整的个人信息,不适合直接放进博客的公开静态资源目录。公开资源一旦随站点构建发布,只要拿到固定地址就可以绕过页面直接访问,也不方便单独控制分享期限和提取密码。
因此,这次将简历 PDF 与博客静态资源分离:文件保存在服务器私有目录中,博客只负责提供下载入口,实际下载交给宝塔面板的“外链分享”功能。
改动内容
- 将简历 PDF 存放到服务器目录
/www/revol-blog-cms/storage/private/resumes。 - 使用宝塔面板生成带提取密码的 PDF 外链。
- 简历模板通过
VITE_RESUME_PDF_SHARE_URL配置下载地址,避免把部署环境地址写死在组件逻辑中。 - 用户点击“下载 PDF”后跳转到宝塔分享页,由宝塔完成提取密码校验和文件下载。
方案与取舍
为什么不把 PDF 放进博客项目
VitePress 的 docs/public 会作为公开静态资源发布,适合图片、图标等公共内容,但不适合需要访问控制的简历文件。将 PDF 放在服务器私有目录,可以避免它跟随博客源码和构建产物公开。
为什么使用宝塔外链
现阶段直接使用宝塔已有能力,可以获得提取密码、分享链接和文件管理功能,不需要额外开发下载接口、密码校验和临时授权逻辑,接入成本较低。
它的限制也比较明确:分享地址依赖宝塔面板的访问域名和端口。如果使用 IP 地址与面板自签名证书,浏览器可能出现证书不受信任或证书域名不匹配的提示。
域名与 SSL 方案
为解决 IP 访问的证书问题,计划给宝塔面板绑定独立子域名,例如 bt.example.com:
- 给子域名添加 A 记录,指向服务器公网 IP。
- 等待 DNS 解析生效。
- 在宝塔“面板设置”中绑定该子域名。
- 为面板申请与子域名匹配的 LiteSSL 或 Let’s Encrypt 证书。
- 重新生成宝塔外链,并更新
VITE_RESUME_PDF_SHARE_URL。 - 重新构建和部署博客。
绑定后,外链预计采用以下形式:
text
https://bt.example.com:面板端口/down/分享标识.pdf面板端口仍会保留。如果以后需要隐藏端口或使用更短、更稳定的下载地址,可以再建设独立下载站点或后端授权下载接口。
验证结果
- 简历模块已经能够从配置中读取宝塔 PDF 分享地址。
- 下载按钮能够跳转到宝塔外链页面。
- 简历 PDF 已迁移到服务器私有目录。
- 宝塔外链已生成,并启用了提取密码。
- 专用子域名的 DNS 记录已添加,目前等待解析生效;域名绑定、正式 SSL 证书和最终外链替换尚待完成。
后续计划
- DNS 生效后完成宝塔面板域名绑定和 SSL 证书申请。
- 重新生成基于域名的分享链接并更新生产环境变量。
- 验证桌面端和移动端的密码输入、下载与证书状态。
- 如果后续需要控制下载次数、有效期或记录下载行为,再将宝塔外链升级为后端签名下载方案。