文章目录
- [🤔 为什么需要 WebDAV 技能?](#🤔 为什么需要 WebDAV 技能?)
- 痛点
- 解决思路
- [🎯 功能设计](#🎯 功能设计)
- 关键特性
- [🛠️ 技术实现](#🛠️ 技术实现)
- [📦 准备工作与安装部署](#📦 准备工作与安装部署)
- [📖 使用指南](#📖 使用指南)
- [🌟 实战案例](#🌟 实战案例)
- 实战效果
- [💡 总结与展望](#💡 总结与展望)
🤔 为什么需要 WebDAV 技能?
痛点
在使用 OpenClaw 构建 AI 团队的过程中,我遇到了一个棘手的问题:人机协同跨平台协作断裂,AI agent、本地文件、异地远程访问三者之间缺少桥梁,OpenClawAI 助手生成的东西在本地,我无法拿到,只能让它发邮件或让它放云盘或NAS ,但是AI 助手无法直接访问 NAS 存储。
具体场景包括:
- 文件中转:AI 生成的文档需要先下载到本地,再手动上传到 NAS,流程繁琐
- 无法即时访问 NAS 资源:团队共享的模板、素材都在 NAS 上,AI 助手需要我手动搬运文件才能使用
- 备份自动化困难:想定期把 AI 生成的工作成果自动备份到 NAS,但没有现成方案
- 跨平台协作断裂:AI agent、本地文件、异地远程访问三者之间缺少桥梁
NAS作为个人的私有数据存储是家庭/团队存储的核心,有没有办法让它将工作成果直接放NAS上呢?这样既保密,空间又不受限制,资料共享也方便。如果能开发一个 OpenClaw 技能,让 AI 助手直接通过 WebDAV 读写 NAS 文件,以上问题就迎刃而解了。
解决思路
OpenClaw 的技能(Skill)系统天然支持扩展。WebDAV 又是标准的文件访问协议,几乎所有 NAS 都支持。两者结合,就能实现:
AI 助手 ↔ OpenClaw ↔ WebDAV 技能 ↔ NAS 存储
🎯 功能设计
基于实际需求,WebDAV 技能需要具备以下核心能力:
| 功能 | 说明 | WebDAV 协议方法 |
|---|---|---|
| 📂 列出目录 | 查看 NAS 目录下的文件和子目录 | PROPFIND (Depth: 1) |
| 📤 文件上传 | 将本地文件上传到 NAS 指定路径 | PUT |
| 📥 文件下载 | 从 NAS 下载文件到本地 | GET |
| 🗑️ 文件删除 | 删除 NAS 上的文件或目录 | DELETE |
| 📁 创建目录 | 在 NAS 上创建新目录 | MKCOL |
| 📊 文件属性 | 查看文件大小、修改时间、类型 | PROPFIND (Depth: 0) |
| 🔌 连接测试 | 快速验证 NAS 连接是否正常 | PROPFIND (Depth: 0) |
关键特性
- 🔄 自动重试:HTTP 500/502/503/504 错误自动重试 3 次,退避策略避免雪崩
- 📈 进度条:上传下载大文件时实时显示进度,不再"干等"
- 🔐 双认证支持:Basic Auth + Digest Auth 自动降级
- 🛡️ SSL 灵活配置:默认开启证书验证,自签名环境可关闭
- 🇨🇳 中文路径友好:自动处理 URL 编码的中文路径
- 🗣️ 双模式调用:支持结构化命令和自然语言两种调用方式
- ⚙️ 首次引导配置:第一次使用自动进入交互式配置向导
🛠️ 技术实现
项目结构
bash
webdav/
├── SKILL.md # 技能描述和使用文档
├── main.py # 核心代码(客户端 + 命令处理)
├── requirements.txt # Python 依赖(requests)
├── README.md # 项目说明
├── .env # 配置文件(服务器地址、认证信息)
└── .venv/ # Python 虚拟环境
核心架构
代码分为三层:
第一层:配置管理
bash
def load_config():
"""加载配置:环境变量 > .env 文件"""
config = {}
env_file = SKILL_DIR / ".env"
if env_file.exists():
with open(env_file, encoding="utf-8") as f:
for line in f:
if line.strip() and not line.startswith("#") and "=" in line:
key, value = line.split("=", 1)
os.environ.setdefault(key.strip(), value.strip())
...
配置加载优先级:构造函数参数 > 环境变量 > .env 文件 > 交互式向导。
第二层:WebDAV 客户端
bash
class WebDAVClient:
def __init__(self, server, username, password, verify_ssl):
# 构建带重试的 session
self.session = requests.Session()
retry = Retry(total=3, backoff_factor=0.5,
status_forcelist=[500, 502, 503, 504])
adapter = HTTPAdapter(max_retries=retry)
self.session.mount("http://", adapter)
self.session.mount("https://", adapter)
每个操作(list/upload/download/delete/mkdir)对应一个 WebDAV HTTP 方法。
第三层:命令处理
支持两种调用模式:
bash
# 结构化命令
"upload local=/tmp/report.pdf remote=openclaw_sharedoc/report.pdf"
# 自然语言命令
"上传 /tmp/report.pdf 到NAS openclaw_sharedoc/"
通过正则表达式匹配自然语言,转为结构化调用。
上传下载的进度条实现
bash
def upload_file(self, local_path, remote_path, progress=True):
file_size = os.path.getsize(local_path)
def gen():
with open(local_path, "rb") as f:
uploaded = 0
chunk_size = 64 * 1024 # 64KB 分块
while True:
chunk = f.read(chunk_size)
if not chunk:
break
uploaded += len(chunk)
yield chunk
if progress and file_size > 0:
pct = min(uploaded / file_size * 100, 100)
bar = "█" * int(pct // 5) + "░" * (20 - int(pct // 5))
sys.stdout.write(f"\r 上传 {filename}: [{bar}] {pct:.1f}%")
使用 Python generator 实现流式上传,64KB 分块读写,兼顾内存效率和进度展示。
📦 准备工作与安装部署
一、准备工作
前提是你的NAS 要开通配置WebDAV的文件共享协议,以下以飞牛NAS为例来配置WebDAV。
1.打开系统设置 > 2.找到文件共享协议 > 3.切换到WebDAV > 4.开启WebDAV > 5.设置可文件夹的范围(也就是设置共享目录)

配置好WebDAV服务后,可以配置ddns,让外网可以访问,如果不配就只能通过fnos提供的FN Connect来外网访问了。

配置好了WebDAV服务后就可以通过任意的终端来访问WebDAV的共享目录了。
ubuntu的WebDAV客户端的配置:


MAC OS的WebDAV客户端的配置:



二、安装部署
- 获取技能代码
bash
# 从 GitHub 克隆
cd /tmp
git clone https://github.com/xiejava1018/myopenclaw-skills.git
# 复制到 OpenClaw 技能目录
mkdir -p ~/.openclaw/skills
cp -r /tmp/myopenclaw-skills/webdav ~/.openclaw/skills/webdav
- 安装 Python 依赖
bash
# 安装 venv 支持(Ubuntu/Debian)
sudo apt install python3.12-venv
# 创建虚拟环境并安装依赖
cd ~/.openclaw/skills/webdav
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
- 配置 NAS 连接
创建 .env 配置文件:
bash
cat > ~/.openclaw/skills/webdav/.env << 'EOF'
WEBDAV_SERVER=https://192.168.0.18:5006
WEBDAV_USERNAME=your_username
WEBDAV_PASSWORD=your_password
WEBDAV_SSL_VERIFY=false
EOF
- 测试连接
bash
cd ~/.openclaw/skills/webdav
WEBDAV_SERVER=https://192.168.0.18:5006 \
WEBDAV_USERNAME=your_username \
WEBDAV_PASSWORD=your_password \
WEBDAV_SSL_VERIFY=false \
.venv/bin/python3 main.py test
输出:
bash
✅ WebDAV 连接正常
服务器: https://192.168.0.18:5006
用户名: xiejava
HTTP 状态: 207
SSL 验证: 关闭
对于OpenClaw或Claude Code来说根本就不要这么麻烦,直接将skill的github地址https://github.com/xiejava1018/myopenclaw-skills/tree/master/webdav 发给它让它自己装就好了。

在安装过程中会询问配置NAS的WebDAV地址、用户名和密码等连接信息,你可以告诉OpenClaw让它自动配置,当然你也可以不告诉它,自己手动在.env文件里去配置。
配置好后可以测试一下,让它列出NAS的Webdav共享的目录。

📖 使用指南
安装完成后就可以在OpenClaw或ClaudeCode中通过自然语言让AI agent直接它通过WebDAV操作NAS的共享目录了。
自然语言使用
WebDAV 技能支持中文自然语言指令:
通过中文自然语言就可以告诉AI agent 操作NAS的webDAV的目录,写文件等。
列出NAS共享目录
列出NAS目录 openclaw_sharedoc
上传 /tmp/file.txt 到NAS openclaw_sharedoc/
下载NAS文件 openclaw_sharedoc/file.txt 到 /tmp/
删除NAS文件 openclaw_sharedoc/file.txt
创建NAS目录 openclaw_sharedoc/new_folder
查看NAS文件 openclaw_sharedoc/file.txt 的信息
测试NAS连接
这样通过NAS的webDAV服务, AI agent 、本地电脑、异地的电脑,都可以通过webDAV服务共享文件。解决了AI团队跨平台协作的问题。
如:有个文件要处理,可以将这个文件放到webDAV共享目录,让openclaw或claude code处理,处理完后实时可以通过访问webDAV共享目录看到处理后的成果;要openclaw去网上收集材料整理文档后,让它将成果文档放到webDAV共享目录,你就可以实时看到它的成果等等。
🌟 实战案例
案例 1:AI 生成文档自动备份到 NAS,作为团队共享
每天AI agent的工作成果自动保存到 NAS,不仅仅在AI agent的本地工作目录,实现了离线备份与团队共享:
效果:AI 助手生成的工作都自动归档到 NAS,再也不怕数据丢失,实现了离线备份与团队共享。
案例 2:NAS 素材文件快速分发
团队在 NAS 上共享了模板文件,AI 助手可以直接读取:
效果:AI 助手直接从 NAS 拉取素材,无需人工中转。
案例 3:定期清理 NAS 过期文件
配合 OpenClaw 的定时任务(HEARTBEAT.md),实现定期清理:
效果:NAS 存储空间自动管理,不需要手动清理。
实战效果
我的OpenClaw是部署在云服务器上面的,我让OpenClaw写了篇博客文章, 让它形成.md的文档放到NAS的webDAV知识库的共享目录,OpenClaw自动调用了WebDAV的skill上传到了NAS的共享目录。

我本地的Ubuntu机器,就可以通过Trae直接访问NAS上的文档进行修改完善。

直接打开NAS上的文档进行编辑完善。

这样极大的提高了和AI agent人、机协同的效率。
📊 兼容性
WebDAV 是开放标准协议,该技能兼容所有支持 WebDAV 的设备和服务:
| 设备/服务 | 兼容性 |
|---|---|
| 群晖 (Synology) | ✅ |
| 威联通 (QNAP) | ✅ |
| 飞牛云 (fnOS) | ✅ |
| Nextcloud | ✅ |
| ownCloud | ✅ |
| RAIDrive | ✅ |
| macOS Server | ✅ |
| IIS WebDAV | ✅ |
💡 总结与展望
WebDAV 技能解决了 AI 助手与 NAS 存储之间的鸿沟,让文件管理变得自然流畅。核心价值:
- 消除文件中转:AI 助手直接读写 NAS,省去手动搬运
- 统一存储管理:NAS 成为 AI 团队的共享文件中心
- 自动化备份:AI 生成的内容可以自动归档到 NAS
- 开放兼容:基于标准 WebDAV 协议,兼容所有主流 NAS
未来可以继续增强的方向:
- 支持文件搜索(按名称/时间/类型)
- 增加同步功能(双向同步指定目录)
- 集成到 OpenClaw 定时任务,实现全自动备份
- 支持多 WebDAV 服务器配置切换
📝 技能开源地址:https://github.com/xiejava1018/myopenclaw-skills/tree/master/webdav
直接让OpenClaw或Claude Code安装后就可以使用。