Ответ 1
Многие медиаплееры требуют, чтобы сервер поддерживал так называемые запросы диапазона HTTP. То есть он должен иметь возможность возвращать определенные части медиафайла по запросу с заголовком Range
. Например, только байты с точно индексом 1000 до 2000 года в файле длиной 10 МБ. Это необходимо для многих медиаплееров, чтобы иметь возможность пропустить определенный диапазон медиапотока достаточно быстро и/или улучшить скорость буферизации, создав несколько соединений, каждый из которых запрашивает разные части файла.
Однако в вашем сервлете много дополнительного кода, который требует хорошего понимания спецификации HTTP Range
. Обычно servletcontainer (Tomcat, JBoss AS, Glassfish и т.д.) Собственный сервлет по умолчанию уже поддерживает это. Поэтому, если есть способ опубликовать медиа-папку в Интернете по стандартным средствам, так что вам не нужно приводить в действие сервлет для этого, то я бы пошел по этому маршруту.
Непонятно, какой сервлетконтейнер вы используете, поэтому я возьму Tomcat в этом примере:
-
Просто отпустите
love.mp3
файл в общедоступном веб-содержимом веб-проекта, чтобы он просто был доступен<a href="love.mp3">
без необходимости для всего сервлета. -
Или, поместите файл
love.mp3
в новую подпапку в папкеTomcat/webapps
, например.Tomcat/webapps/media/love.mp3
. Таким образом, он доступен<a href="/media/love.mp3">
. -
Или, поместите файл
love.mp3
в другое место на диске, например./path/to/media/love.mp3
и добавьте папку/media
в новый контекст, добавив следующую строку в Tomcat/conf/server.xml
:<Context docBase="/path/to/media" path="/media" />
Таким образом, он доступен и для
<a href="/media/love.mp3">
.
В любом случае Tomcat самостоятельно DefaultServlet
, который имеет надлежащую поддержку Range
, будет использоваться для потоковой передачи содержимого.
Но если нет абсолютно никакого способа использовать собственный сервлет servletcontainer, тогда вам нужно переписать свой код сервлета таким образом, чтобы он правильно поддерживал Range
. Вы можете получить вдохновение из примеров с открытым исходным кодом, таких как Tomcat DefaultServlet
и OmniFaces FileServlet
.