起因
今天在做一个小项目的时候出现一个错误,我上传音乐文件渲染到前端页面的时候,需要将音乐文件的全路径写入到数据库中。例如我有一首歌的路径是这样的:“E:\\CloudMusic\\music\\music\\キセキ(奇迹)-GreeeeN.mp3”,然而当我选择音乐的时候,写入数据库的路径却是这样的:
嗯???我直接黑人问号脸?
你这斜杠有问题啊。
开玩笑,这些都是我本地路径里面的斜杠,我还能给你假斜杠蛋子吗?
好了不开玩笑,我在上网搜寻的一些相似的问题的时候,发现很多人都是这样的。那么为什么会这样子呢?
原因
- 主要问题啊还是出现在‘\’本身身上,因为我们做程序员的都知道,‘\’本身在编程语言中就是一个转义符,如果你想要在编程语言中显示‘\’的话,你就必须先用斜杠转义一下,也就是‘\\’用两条斜杠,来表示一条斜杠。
- 那么问题来了。我上面的那条路径明明是两条些斜杠啊,为什么都被吞了呢?
- 解答:很简单,如果你使用java或者其他编程语言来插入数据库的话,那么Java转义会自动剔除一个‘\’,路径就变成了“E:\CloudMusic\music\music\キセキ(奇迹)-GreeeeN.mp3”,而当Java保存这条数据进mysql的时候,mysql也会剔除一个‘\’(这是因为mysql为Java语言实现,它不认识单斜杠,会把其理解为转义符),所以最终数据库中保存的路径是:“E:CloudMusicmusicmusicキセキ(奇迹)-GreeeeN.mp3”
- 所以,当你插入的时候,需要看看数据经过几手通道
解决
- 我使用的方法呢就是将那一串路径当作字符串,使用字符串的replaceAll(“需要替代的值”,“替代的值”),将所有斜杠转义成有斜杠的样子
path = path.replaceAll("\\","\\\\") //path代表你路径的字符串
因为是两条斜杠,所以需要四条才能转义成两条。
- 或者我们可以用反斜杠代替,但同样需要两条转义符"\",来保证反斜杠传到mysql中
path = path.replaceAll("\\","\\/")//path代表你路径的字符串
解决后我的数据库如下显示:
而音乐文件也可以正常渲染上去了哈哈,祝各位不会遇到我这么让人无语的问题,OK继续码代码去啦。