JavaScript onclick/onchange方法获取文件路径时丢失反斜杠的解决方案咨询
嘿,这个问题其实是JavaScript的转义字符特性导致的,我来给你拆解清楚:
首先得明确,在JS里反斜杠\是转义字符,它的作用是表示特殊字符(比如换行符\n、制表符\t),而不是普通的文本分隔符。所以当你的文件路径里带单个反斜杠时,JS会自动把它当成转义标记,而不是路径分隔符,最后就会出现反斜杠消失、路径连在一起的情况。
针对不同场景,你可以这样解决:
如果路径是从后端接口返回的:
让后端在返回路径时,把每个反斜杠都转义成双反斜杠\\。比如后端应该返回Files\\Item\\638069707322680384-5832364197407734490_121.jpg,这样JS解析后就能识别出每个\\是一个普通的反斜杠\,最终得到你想要的正确路径。如果是通过
<input type="file">的onchange事件获取本地文件路径:
这里要注意,出于浏览器的安全限制,浏览器不会返回真实的本地文件完整路径(带反斜杠的那种),只会返回文件名或者经过处理的伪路径。如果你的需求是上传文件,直接使用事件里的File对象就可以了,完全不需要关心真实的本地路径。如果是你自己在JS里拼接或定义路径:
要么把反斜杠写成双反斜杠,要么直接用正斜杠/代替反斜杠——因为JS和浏览器都支持正斜杠作为路径分隔符,而且不会有转义问题,比如Files/Item/638069707322680384-5832364197407734490_121.jpg这种写法在JS里完全有效,也不会出现分隔符丢失的情况。
另外还有个临时 workaround:如果已经拿到了丢失反斜杠的路径字符串,你可以根据路径的固定结构(比如知道分隔部分是Files、Item),用字符串替换手动补充分隔符,但这终究是权宜之计,最好还是从源头解决转义问题哦。
备注:内容来源于stack exchange,提问作者digizoom

