к аудио тегу исправлена ​​основная проблема. Он предотвращает загрузку файлов сразу после загрузки страницы, вместо этого они загружаются только в том случае, если пользователь выбирает воспроизведение песни. (Значение по умолчанию для предварительной загрузки - auto, и оно будет пытаться загрузить содержимое файлов по мере загрузки веб-страницы)

окальное веб-приложение (использующее java spark Framework) создает отчет Html5, и некоторые страницы содержат аудиофайлы, которые можно воспроизводить.

Первоначально это делалось исключительно через HTML, такой как

 <audio controls="controls">
            <source src="/Music/Melco\TestMusic\TestMusic\WAV\Music\David Ferrard\Across The Troubled Wave\02 - The Slave&#x27;s Lament.WAV">
        </audio>

но он работал только в том случае, если музыка находилась в подпапке корневой папки веб-приложений. Чтобы обойти это, я создал символическую ссылку на корневую папку (/ Музыка - это символическая ссылка в директории веб-серверов на /)

Но символическая ссылка не доступна в Windows, а в UNIX символическая ссылка вызывает проблему для другого инструмента, поэтому я искал другое приближение.

Теперь я пытаюсь использовать конечную точку сервера, потому что все файлы видны на сервере

    <audio controls="controls">
        <source src="/fixsongs.play_music?url=E:\Melco\TestMusic\TestMusic\WAV\Music\David Ferrard\Across The Troubled Wave\01 - Peg and Awl.WAV">
    </audio>

и метод конечной точки play_music это

public byte[] playUrl(Request request, Response response)
{
    String filename = request.queryParams("url");
    MainWindow.logger.severe("playMusic:"+filename);
    try
    {
        if (filename != null)
        {
            Path path = Paths.get(filename);
            if (Files.exists(path))
            {
                byte[] data = Files.readAllBytes(path);
                MainWindow.logger.severe("playMusic:"+filename+":" + data.length);
                return data;
            }
        }
    }
    catch(Exception ex)
    {
        MainWindow.logger.log(Level.SEVERE, ex.getMessage(), ex);
    }
    return null;
}

Сейчас это работает, но есть ряд проблем.

Я ожидал, что URL-адрес play_music будет вызываться только тогда, когда я на самом деле нажимаю кнопку воспроизведения на элементе управления, но на самом деле он вызывал его для первых 6 файлов, как только я открыл веб-страницу, о чем свидетельствует этот вывод журнала

05/08/2018 11.53.38:BST:CmdRemote:lambda$start$90:SEVERE: >>>>>/fixsongs.play_music
05/08/2018 11.53.38:BST:ServerFixSongs:playUrl:SEVERE: playMusic:E:\Melco\TestMusic\TestMusic\WAV\Music\David Ferrard\Across The Troubled Wave\01 - Peg and Awl.WAV
05/08/2018 11.53.38:BST:CmdRemote:lambda$start$90:SEVERE: >>>>>/fixsongs.play_music
05/08/2018 11.53.38:BST:ServerFixSongs:playUrl:SEVERE: playMusic:E:\Melco\TestMusic\TestMusic\WAV\Music\David Ferrard\Across The Troubled Wave\02 - The Slave's Lament.WAV
05/08/2018 11.53.38:BST:CmdRemote:lambda$start$90:SEVERE: >>>>>/fixsongs.play_music
05/08/2018 11.53.38:BST:CmdRemote:lambda$start$90:SEVERE: >>>>>/fixsongs.play_music
05/08/2018 11.53.38:BST:CmdRemote:lambda$start$90:SEVERE: >>>>>/fixsongs.play_music
05/08/2018 11.53.38:BST:ServerFixSongs:playUrl:SEVERE: playMusic:E:\Melco\TestMusic\TestMusic\WAV\Music\David Ferrard\Across The Troubled Wave\03 - Gilmartin.WAV
05/08/2018 11.53.38:BST:ServerFixSongs:playUrl:SEVERE: playMusic:E:\Melco\TestMusic\TestMusic\WAV\Music\David Ferrard\Across The Troubled Wave\04 - Jackaro.WAV
05/08/2018 11.53.38:BST:CmdRemote:lambda$start$90:SEVERE: >>>>>/fixsongs.play_music
05/08/2018 11.53.38:BST:ServerFixSongs:playUrl:SEVERE: playMusic:E:\Melco\TestMusic\TestMusic\WAV\Music\David Ferrard\Across The Troubled Wave\06 - Calling My Children Home.WAV
05/08/2018 11.53.38:BST:ServerFixSongs:playUrl:SEVERE: playMusic:E:\Melco\TestMusic\TestMusic\WAV\Music\David Ferrard\Across The Troubled Wave\05 - Once I Knew A Pretty Girl.WAV
05/08/2018 11.53.38:BST:ServerFixSongs:playUrl:SEVERE: playMusic:E:\Melco\TestMusic\TestMusic\WAV\Music\David Ferrard\Across The Troubled Wave\01 - Peg and Awl.WAV:31265996
05/08/2018 11.53.38:BST:ServerFixSongs:playUrl:SEVERE: playMusic:E:\Melco\TestMusic\TestMusic\WAV\Music\David Ferrard\Across The Troubled Wave\02 - The Slave's Lament.WAV:36671026
05/08/2018 11.53.39:BST:ServerFixSongs:playUrl:SEVERE: playMusic:E:\Melco\TestMusic\TestMusic\WAV\Music\David Ferrard\Across The Troubled Wave\03 - Gilmartin.WAV:50752138
05/08/2018 11.53.39:BST:ServerFixSongs:playUrl:SEVERE: playMusic:E:\Melco\TestMusic\TestMusic\WAV\Music\David Ferrard\Across The Troubled Wave\04 - Jackaro.WAV:46483668
05/08/2018 11.53.39:BST:ServerFixSongs:playUrl:SEVERE: playMusic:E:\Melco\TestMusic\TestMusic\WAV\Music\David Ferrard\Across The Troubled Wave\06 - Calling My Children Home.WAV:33175954
05/08/2018 11.53.39:BST:ServerFixSongs:playUrl:SEVERE: playMusic:E:\Melco\TestMusic\TestMusic\WAV\Music\David Ferrard\Across The Troubled Wave\05 - Once I Knew A Pretty Girl.WAV:44547648

почему он это делает?

Эти файлы можно было воспроизвести, но общая длина дорожки для всех была установлена ​​на одно и то же неверное значение.

Рендеринг файлов, которые можно было воспроизвести, был неправильным (сравните первые шесть с остальными)

Ни один из других файлов не может быть воспроизведен

Это было с Wav-файлами, которые я тогда попробовал на mp3-версиях файлов, теперь он загрузил все файлы и длина трека была правильной. Так что я предполагаю, что это проблема с ресурсами, но это приложение будет развернуто на медленной машине, обслуживающей большинство файлов wav, поэтому недопустимо, чтобы он пытался загрузить все файлы, как только отобразится страница, так что есть ли их можно загружать только тогда, когда пользователь хочет их воспроизвести, потому что в большинстве случаев они не хотят ничего воспроизводить.

Ответы на вопрос(1)

Ваш ответ на вопрос