Skip to content

fix: 修复Windows作为服务器时,发送Media的路径解析问题#118

Open
danielcy wants to merge 2 commits intosunnoy:mainfrom
danielcy:feature/fix-win-media-send
Open

fix: 修复Windows作为服务器时,发送Media的路径解析问题#118
danielcy wants to merge 2 commits intosunnoy:mainfrom
danielcy:feature/fix-win-media-send

Conversation

@danielcy
Copy link

使用Win作为OpenClaw服务器时,运行到callback-inbounds.js/loadLocalReplyMedia方法时发现,解析出来的mediaUrl会有问题,所有的/变成了\,这里新增了一个replace的方法。

P.S. 最合理的方式应该还是追溯到前面的解析部分去处理,这个pr可先作为一个临时解决方案

@danielcy danielcy mentioned this pull request Mar 15, 2026
@sunnoy
Copy link
Owner

sunnoy commented Mar 18, 2026

感谢提交这个修复思路,Windows 路径问题确实值得处理。不过这版我建议先不要直接合,主要原因是修复范围还不够完整。

当前改动只对“以反斜杠开头”的路径做了一次替换,但标准 Windows 本地路径更常见的是 C:\\path\\to\\file 这种形式。按现在的实现,这类路径后面仍然会在 startsWith("/") / startsWith("sandbox:") 的检查里被拒掉,所以还不能真正覆盖 Windows 服务器上的常见场景。

另外这里更稳的做法,应该是把路径规范化统一收敛到 normalizeReplyMediaUrlForLoad / 共享路径解析层里处理,而不是只在 callback inbound 入口做一个前导字符修补。否则 WS / callback / 其他 media 路径入口容易继续分叉。

建议:

  1. 明确支持 C:\\...\\server\\share\\...、前导反斜杠等几类 Windows 路径
  2. 把规范化逻辑放到共享路径解析层
  3. 补对应测试(至少覆盖 drive-letter path)

如果按这个方向补齐,我觉得这条 PR 可以继续推进。

@sunnoy
Copy link
Owner

sunnoy commented Mar 23, 2026

感谢 PR!Windows 路径问题确实需要处理,但这个方案有几个问题:

  1. replace("\\", "/") 只替换第一个反斜杠,应该用 replaceAll("\\", "/").replace(/\\\\/g, "/")
  2. 只处理了开头是 \ 的情况,没有覆盖 C:\Users\... 这种路径
  3. callback-inbound.js 在 v2.4.0 中已经重构,这个 PR 会有合并冲突

建议更好的做法是在 normalizeMediaPath() (channel-plugin.js) 或 normalizeMediaReference() (openclaw-compat.js) 中统一处理 Windows 路径,这样所有路径都会受益。

如果你有兴趣更新这个 PR,可以参考新的代码结构。或者我们在后续版本中统一处理 Windows 兼容。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants