Потоковые динамические файлы из Spring MVC - PullRequest
3 голосов
/ 01 марта 2010

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

Итак, как я могу это сделать?Лучшее, что я могу найти, это написать контроллер, который читает файл вручную и передает его побитно.Однако это кажется далеко не идеальным.Поддержка для чего-то подобного уже встроена в Spring MVC или в стандартную спецификацию сервера приложений?

Спасибо!

Ответы [ 3 ]

1 голос
/ 01 марта 2010

или стандартная спецификация сервера приложений?

Да, есть. Поскольку вы не упомянули, какой из них вы используете, я дам вам ответ, нацеленный на Tomcat . Все, что вам нужно сделать, это добавить элемент Context для /path/to/your/resources в /conf/server.xml:

<Context docBase="/path/to/your/resources" path="/resources" />

Таким образом, они будут доступны через http://example.com/resources/...

1 голос
/ 01 марта 2010

Если ваша модель обработки поддерживает это, почему бы не вырезать посредника файловой системы из картинки полностью и просто направить файлы обратно через поток ответов по мере их генерации? Взгляните на классы AbstractExcelView и AbstractPDFView в Spring MVC, чтобы увидеть некоторые примеры того, как это делается.

0 голосов
/ 01 марта 2010

Идеальным для этого является использование облегченного прокси-сервера перед вашим сервером приложений, например, nginx или lighthttpd. Вы можете настроить его для обслуживания статического контента, не вызывая приложение.

Если каталог и файлы такие динамические, вы можете подготовить реальный путь к файлу на вашем контроллере и передать этот путь к файлу внешнего сервера, используя заголовки. Например, для nginx это заголовок X-Accel-Redirect. Подробнее об этом (и перейдите по ссылкам на другие http-серверы) там

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