我有一个 Java 应用程序,它可以作为常规 java Swing 应用程序运行,但会创建一个标准的 html5 报告,该报告在 web 浏览器中打开。
例如
浏览器网址为:
file:///C:/Users/Paul/AppData/Roaming/SongKong/Reports/FixSongsReport00574/FixSongsReport00574.html
作为其中的一部分,它使用音频标签来允许在浏览器中播放歌曲
<h5>
<audio controls="controls">
<source src="file:/E:/Test4/test.WAV">
</audio>
</h5>
这很好用。
但是该应用程序也可以使用 Html 用户界面运行,然后它在端口 4567 上使用Java Spark运行网络服务器,如果我随后将完全相同的报告(是的,我实际上在磁盘上提供相同的文件)提供给同一台计算机所以音频文件是计算机的本地文件,它将不再播放歌曲。
这将是浏览器网址
http://localhost:4567/FixSongsReport00574/FixSongsReport00574.html
那么为什么会这样,因为我在源元素中指定了完整路径,因此我不明白为什么它会受到诸如提供静态文件的位置等因素的影响。
但如果相关,这是 java-spark 启动方法
CustomJettyServerFactory customJettyServerFactory = new CustomJettyServerFactory();
EmbeddedServers.add(
EmbeddedServers.Identifiers.JETTY,
new EmbeddedJettyFactory(customJettyServerFactory));
staticFiles.externalLocation(Platform.getPlatformReportFolder().getPath());
staticFiles.location("");
staticFiles.expireTime(600);
SongKong.songKong.setRemote(true);
StartPage.recreateIndexPage();
init();
configureWebEndPoints();
configureApiWebEndPoints();
before((request, response) -> {
MainWindow.logger.severe(">>>>>"+request.uri());
});
listenForFinish();
后续问题是,虽然我不明白为什么它在本地计算机上不起作用,但我可以看到,如果通过远程浏览器连接,那么它将不起作用,因为文件 url 是相对于服务器而不是客户端机器,在这种情况下我将如何使文件可播放。