《为了1000个MP3,我差点成了“人肉拷贝机”》
摘要本文记录了一个项目中为扫码计数功能添加语音播报的历程。起初 MP3 文件存放在本地固定目录,虽调用快但部署麻烦;后来存到云表服务器 public 目录,升级时文件会丢失,导致反复拷贝备份,极其繁琐。最终找到优雅方案——修改 Tomcat server.xml 并创建虚拟路径 XML,实现资源热加载,无需重启服务器即可使用。正文在做项目时,我设计了一个计数时自动语音播报的功能——用户扫码点数时,系统会播放相应的 MP3 文件。
听起来很简单,但在存放这些 MP3 文件的过程中,我可走了不少弯路。第一版方案:本地固定目录存放存放路径:D:\MP3\{1-1000}.MP3
优点:
[*]调用速度快,直接读本地文件。
缺点:
[*]每个终端都要手动拷贝一遍文件。
[*]如果用户没有 D 盘,就会直接报错。
第二版方案:云表服务器 public 目录我发现云表服务器的 public 目录人人可访问,于是将 MP3 文件放到了安装目录下:
D:\Latosoft\LatoServer\Bin\Tomcat\webapps\ROOT\WEB-INF\application\public\mp3\{1-1000}.MP3
这个方法一开始简直不要太愉快,稳定好用,我甚至以为就此大功告成。然而某次服务器升级后,用户反馈扫码没有声音了——我才发现,1000 多个 MP3 文件全没了!
没办法,只能花半天时间重新生成、拷贝……
结果以后每次升级都得重复这事:
[*]第二次升级 → 拷贝
[*]第三次升级 → 继续拷贝
[*]…没完没了。
直到昨天,服务器加硬件后需要卸载重装,我又又又要拷贝资源时,我忍不了了!
于是开始查资料,做实验,终于找到了一个优雅的新方法。
第三版方案:Tomcat 虚拟路径 + 热加载只需修改 Tomcat 配置文件 server.xml,就能让云表热加载外部资源目录。步骤 1:修改 server.xml找到云表服务器安装路径,例如:E:\Latosoft\LatoServer
配置文件路径:E:\Latosoft\LatoServer\Bin\Tomcat\conf\server.xml
打开后,找到 <Host> 节点,把:
autoDeploy="false"
改成:autoDeploy="true"
保存并重启云表服务器。步骤 2:创建虚拟路径配置文件在目录:
E:\Latosoft\LatoServer\Bin\Tomcat\conf\Catalina\localhost
新建一个 XML 文件,文件名就是你想映射的虚拟路径名。
例如我想用 /mp3/ 访问 MP3 文件,就建:mp3.xml
内容如下:
<Context docBase="D:\mp3" list="true" />
这里 docBase 指向真实的资源路径。使用效果
[*]云表浏览器访问路径:
http://服务器地址:88/mp3/1.mp3
[*]热加载生效:把配置文件放进去后,不用重启服务器即可直接访问资源。
这样,我终于摆脱了升级后无休止的拷贝工作,MP3语音播报功能也稳定了。
最终必杀技:通用虚拟路径,一招清场
资源的调用:推荐用终极大招
页:
[1]