![]() 摘要 本文记录了一个项目中为扫码计数功能添加语音播报的历程。起初 MP3 文件存放在本地固定目录,虽调用快但部署麻烦;后来存到云表服务器 public 目录,升级时文件会丢失,导致反复拷贝备份,极其繁琐。最终找到优雅方案——修改 Tomcat server.xml 并创建虚拟路径 XML,实现资源热加载,无需重启服务器即可使用。 正文 在做项目时,我设计了一个计数时自动语音播报的功能——用户扫码点数时,系统会播放相应的 MP3 文件。 听起来很简单,但在存放这些 MP3 文件的过程中,我可走了不少弯路。 第一版方案:本地固定目录存放 存放路径: D:\MP3\{1-1000}.MP3 优点:
缺点:
第二版方案:云表服务器 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 文件,就建: ![]() 内容如下: <Context docBase="D:\mp3" list="true" /> 这里 docBase 指向真实的资源路径。 使用效果
http://服务器地址:88/mp3/1.mp3
这样,我终于摆脱了升级后无休止的拷贝工作,MP3语音播报功能也稳定了。 ![]() |
+11
最近谁赞过
2 条回帖