2

我有一个 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 是相对于服务器而不是客户端机器,在这种情况下我将如何使文件可播放。

4

2 回答 2

1

出于安全原因,您不能将 HTTP 服务器和文件协议混合在一起。所以你需要做的是下面

在提供任何 html 文件时,读取其内容并替换file:/为类似/localfile?url=

然后您需要/localfile在嵌入式服务器代码中创建一个端点,该端点将读取 url,然后在本地流式传输文件。您的服务器代码将能够访问本地文件并将其流式传输。

在 FF11 的日子里曾经有很少的技术,但它们不再有效

如何在 Firefox 11 中查看来自 http://localhost 服务页面的文件://图像?

于 2018-05-17T14:32:31.477 回答
-1

试试这个我希望它会帮助你

如何?为了让你的网页播放音乐,html代码可以很简单

<audio src="the location of the music url" controls> </audio>

例子

<audio controls>
    <source src="/assets_tutorials/media/Loreena_Mckennitt_Snow_56bit.mp3" type="audio/mpeg">
    <source src="/assets_tutorials/media/Loreena_Mckennitt_Snow_56bit.ogg" type="audio/ogg">
    Your browser does not support the audio tag.
</audio>
于 2018-05-15T10:42:27.960 回答