Кто-нибудь знает каркас сервлета Java File, который поддерживает HttpRanges и т. Д. - PullRequest
5 голосов
/ 11 июня 2011

Я пытался найти каркас файла сервлета, который предоставляет немного больше, чем просто чтение файла с установкой соответствующих заголовков и все. В сети доступно бесчисленное множество сэмплов, большинство из которых довольно просты, и очень немногие (почти ни один) не поддерживают что-то более сложное, как я опишу ниже.

HTTP

Http предоставляет гораздо более богатые функции, такие как - диапазоны, которые помогают реализовать резюме загрузки файла. - управление кешем через etags и даты последнего изменения.

погуглить

Однако я не могу найти ничего, кроме простого примера файлового сервлета. К сожалению, «Java Servlet Framework для загрузки файлов» и другие подобные комбинации - это очень перегруженная форма, и в большинстве случаев Google возвращает веб-платформы, а не то, что облегчает поддержку некоторых или всех ранее упомянутых расширенных функций.

Thinking ...

Сверх того, как у меня в голове, фреймворк предоставит такой интерфейс:

FileProvider {
   Date lastModified();
   INputStream inputStream();
   String etag();
   ...
}
  • FileProvider берет путь к файлу и преобразовывает его в реальный файл, возможно что-то из базы данных и т. Д.
  • если файл не изменился (определяется чтением FileProvider.lastModifier (), вот и все.
  • Если запрос запрашивает диапазон, то ч / б будет читать FileProvider.inputStream (), записывая только заинтересованные диапазоны в HttpServletResponse.
  • Значение etag будет использоваться во время фазы обсуждения, чтобы определить, поддерживаются ли диапазоны и т. Д.
  • существовал бы другой интерфейс для "создания" FileProvider с указанием пути и т. Д.

Если кто-нибудь знает структуру, которая разделяет все неприятные фрагменты чтения заголовков и сравнения значений, которые были бы хорошими.

Лучший источник, который я смог найти, - это

http://balusc.blogspot.com/2009/02/fileservlet-supporting-resume-and.html

но, к сожалению, в примере нет условия для вставки FileProvider и предполагается, что информация о пути из запроса отображается в файл на диске в некотором каталоге.

1 Ответ

1 голос
/ 20 июня 2011

Apache Tomcat DefaultServlet может содержать большую часть того, что вы ищете.С первого взгляда я вижу разбор ETag и обработку AcceptRange.

http://www.docjar.com/html/api/org/apache/catalina/servlets/DefaultServlet.java.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...