预览不包含#的文件时可以正常预览,但是只要预览文件名中包含#的文件,不管是在开头,结尾还是中间都会跳转到安全提示页面,我想了解一下原因并且想知道怎么解决
可以下载kkfile的源码,用AI分析一下
这是因为 # 在 URL 中是片段标识符(fragment identifier),浏览器遇到 # 会把后面的内容当作页面锚点而不是文件名的一部分。kkfile 预览时把文件名拼进 URL,# 之后的字符被浏览器截断,服务端拿到的文件名不完整,触发安全校验跳转。
解决方向有两个:
前端 encode:文件名传入 kkfile 前用 encodeURIComponent 编码,# 会被编码成 %23,服务端 decode 后还原。这是最直接的修法。
服务端兜底:在 kkfile 的 URL 解析逻辑里,对获取到的文件名参数做一次完整校验,如果检测到编码后的 %23 再做 decode。防止前端漏编码的情况。
如果改不了 kkfile 源码,临时方案是把文件名中的 # 替换掉再预览。