DSH 资料站 FTP 自动上传方案
把 one 学习资料站每次更新后的 index.html 和新页面,自动上传到 FTP 网站空间的完整方案:
架构流程、涉及文件、凭据安全、配置项、实测结果与边界说明。
01需求与目标
- 核心目标:每次
index.html被更新、或新增了.html页面后,自动同步到网站空间。 - 目标站点:一个 FTP 网站空间(服务器地址保存在 dsh 凭据文件中,不对外公开)。
- 安全要求:凭据受保护——不写入脚本、不写入系统注册表、不随站点上传。
- 易用要求:日常只需双击一个入口,其余自动化完成。
02整体方案与流程
在原有"问答 → 生成网页 → 刷新入口"的基础上,追加一步自动上传:
双击入口更新入口.bat
→
重建入口页update-index.ps1
→
读取凭据~/.dsh/.credentials.yaml
→
上传所有 HTMLupload-ftp.ps1
→
网站空间ftp://<服务器>/
🔄 自动上传的触发点
上传由
update-index.ps1 在重建入口之后自动调用。因此无论手动运行脚本,还是双击
更新入口.bat,都会在刷新入口的同时完成上传。
03涉及文件
| 文件 | 作用 | 改动性质 |
|---|---|---|
| upload-ftp.ps1 | 新增:用 curl.exe 遍历 *.html 逐个 FTP 上传;从 dsh 凭据文件读账号/密码。(curl 会把中文文件名按 UTF-8 发送,避免服务器上文件名乱码) |
新增 |
| update-index.ps1 | 修改:重建入口页后自动调用 upload-ftp.ps1。 |
修改 |
| 更新入口.bat | 修改:双击入口,标题/文案更新为"更新 + 上传"。 | 修改 |
| ~/.dsh/.credentials.yaml | 修改:新增 DSH_FTP_USER / DSH_FTP_PASS 两行(dsh 凭据文件)。 |
修改 |
04凭据安全方案
凭据存放在 dsh 自带的凭据文件(~/.dsh/.credentials.yaml,与已有的
DEEPSEEK_API_KEY 同处),上传脚本运行时自动读取:
# ~/.dsh/.credentials.yaml
DEEPSEEK_API_KEY: ...
DSH_FTP_USER: 你的账号
DSH_FTP_PASS: 你的密码
🔐 为什么这样存
- 不写脚本:凭据不出现源码/脚本里。
- 不写注册表:不修改系统环境变量,不动电脑系统。
- 不随站点上传:凭据在
~/.dsh下,与站点目录隔离。 - 可兜底:环境变量
DSH_FTP_USER/DSH_FTP_PASS可用作兜底;缺失时脚本报错并提示。
05配置项
| 项 | 来源 | 默认 / 说明 |
|---|---|---|
| host | dsh 凭据文件 / 环境变量 DSH_FTP_HOST | <服务器地址·不公开> |
| port | 环境变量 DSH_FTP_PORT | 21 |
| user | dsh 凭据文件 / DSH_FTP_USER | 必填 |
| pass | dsh 凭据文件 / DSH_FTP_PASS | 必填 |
| 远程目录 | 环境变量 DSH_FTP_DIR | 空 = 根目录;可填 /sub |
上传方式为覆盖式:已存在的文件也会重新上传,因此新增与修改都能同步到服务器。
06实测验证
✅ 验证结果
在无任何环境变量的情况下运行,脚本从 dsh 凭据文件读到账号/密码,
8 个 HTML 全部上传成功到
ftp://<服务器>/,包括 index.html 及各内容页。
07边界与注意事项
- 远程目录默认根目录:若网站在服务器上的实际路径在子目录,需设置
DSH_FTP_DIR。 - 中文文件名按 UTF-8 上传:用
curl.exe上传,文件名按 UTF-8 发送,中文文件名在服务器上不会乱码。 (FtpWebRequest会按系统 ANSI/GBK 编码文件名,导致服务器上中文文件名乱码,因此不再使用。) - 只传 HTML:.md 源文件不在上传范围(按需求)。
- 中文脚本需 UTF-8 BOM:Windows PowerShell 5.1 会按 GBK 读无 BOM 脚本导致乱码,脚本均保持带 BOM 的 UTF-8。
- 凭据改动时机:改了 dsh 凭据文件后,下次运行上传脚本即生效。
- 暂停上传:把
update-index.ps1末尾调用upload-ftp.ps1的两行注释掉即可。
08延伸方向
🚧 可选增强
若想要网页 GUI 的 FTP 配置表单(在 dsh 设置界面直接填账号/密码保存),需要开发一个 Cordis
设置分节插件并在浏览器侧渲染。工作量和风险均大于当前方案;当前"凭据在 dsh 设置文件"的方式已满足
"受保护、不改系统"的要求,可先用。