在多渠道 AI Agent 场景中(LINE、WeChat、WhatsApp、DingTalk 等),一个常见问题是:
❌ 很多聊天平台根本不支持发送任意文件附件
❌ 即使支持,也常出现400 Bad Request错误
❌ 直接暴露服务器文件路径存在安全风险
为了彻底解决这个问题,我构建了一套完整的:
OpenClaw + Download API + Caddy 反向代理 + 安全签名机制
架构,实现:
文件自动兜底分发
一天有效的临时下载链接
会话隔离
自动清理
不暴露服务器路径
不需要用户确认
本文完整总结部署方案。
我们希望实现:
当频道支持附件 → 直接发送
当频道不支持或发送失败 → 自动生成下载链接
下载链接:
默认有效 24 小时
用户看到的是友好文件名
不暴露服务器真实路径
每个会话文件隔离
自动定期清理
最小 root 权限运行
公网用户
↓
Caddy (HTTPS)
↓
FastAPI Download API (azureuser)
↓
/---/---/.openclaw/workspace/public/sessions/{sessionId}
↑
OpenClaw Skill secure-download-link
功能:
复制生成文件到会话隔离目录
随机文件名
生成签名 token
返回下载 URL
默认 TTL = 86400 秒(1 天)
下载文件时:
使用 Content-Disposition
用户看到的是友好文件名
而不是长 token
接口:
GET /dl/{token}
安全机制:
签名校验(itsdangerous)
过期时间校验
会话 ID 校验
路径穿越防护
不暴露真实 BASE_DIR
只监听 127.0.0.1
health 接口已修改为:
{
"ok": true,
"service": "download-api",
"status": "running"
}
不泄露服务器路径。
Caddy 负责:
监听 80/443
自动申请 HTTPS(有域名时)
反代到 127.0.0.1:19090
示例配置:
files.example.com {
encode gzip
reverse_proxy 127.0.0.1:19090
}
如果只有 IP:
:80 {
handle_path /dl/* {
reverse_proxy 127.0.0.1:19090
}
handle {
reverse_proxy 127.0.0.1:18789
}
}
Download API 使用:
User=azureuser
Group=azureuser
绝不使用 root。
原因:
防止路径穿越造成系统文件泄露
防止攻击扩大权限
程序放在 /opt/download-api
配置放在 /etc/download-api.env
文件数据放在 workspace
遵循 Linux FHS 标准。
文件发布路径:
public/sessions/{sessionId}/{random_uuid}.pdf
优点:
不可枚举
不冲突
多用户安全
系统级 cron:
0 3 * * * azureuser find /xxx/xxx/.openclaw/workspace/public/sessions -type f -mtime +3 -delete
防止磁盘堆积。
在 AGENTS.md 中加入:
If attachment sending fails or channel does not support file uploads:
→ Immediately use secure-download-link
→ Generate 24h valid link
→ Send file name + download link + expiry notice
→ Do not ask user for confirmation
实现:
无需用户参与
自动 fallback
体验平滑
可以只使用 IP 地址:
DL_DOMAIN=1.2.3.4
DL_SCHEME=http
但注意:
公网可信 HTTPS 证书通常需要域名
IP 只能使用 HTTP 或自签 TLS
生产环境建议使用域名。
我们制作了两个安装包:
secure-download-link-skill.zip
download-api-package.zip
安装后自动:
创建目录
创建 venv
写 systemd
写 Caddy 配置
写 cron 清理
启动服务
实现真正的“企业级文件分发模块”。
很多人用:
S3 临时链接
临时网盘
直接暴露文件目录
但这种架构的优点是:
完全自建
可控
可审计
会话隔离
可扩展为 SaaS 文件服务
可做下载次数限制
可做一次性链接
它本质上是:
一个轻量级的私有文件分发系统
这次部署不仅解决了:
“LINE 不能发附件怎么办?”
而是构建了:
AI 文件生命周期管理
多渠道兼容策略
安全签名下载机制
最小权限服务架构
自动垃圾清理策略
这已经不是简单脚本,而是:
一套可长期运行的生产级文件分发架构。
如果有需求,欢迎评论留下联系方式,或者给我们留言,完整压缩包免费分享
0 评论