为什么 Html 音频控制在 html 中失败而不是作为常规文件处理

Why does Html Audio control fails in html if served rather than treated as a regular file

我有一个 Java 应用程序,它可以 运行 作为常规 java Swing 应用程序,但创建一个标准的 html5 报告,该报告在网络浏览器中打开。

例如

浏览器 Url 是:

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 用户界面,然后它 运行 是一个使用 Java Spark 端口 4567 的网络服务器,如果我随后提供确切的服务相同的报告(是的,我实际上在磁盘上提供相同文件的文件)到同一台计算机,因此音频文件在计算机本地,它将不再播放歌曲。

这将是浏览器 Url

http://localhost:4567/FixSongsReport00574/FixSongsReport00574.html

为什么会这样,因为我在 source 元素中指定了完整路径,因此我不明白为什么它会受到诸如提供静态文件的位置等因素的影响从。

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

试试这个,希望对你有帮助

怎么办? 为了让你的网页播放音乐,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>

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

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

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

FF11 的时候技术很少,现在已经不行了