Java, Spring MVC, самый простой способ извлечь любой тип файла (.png, .jpg, .pdf, .doc и т. Д.) С сервера и предоставить пользователю для загрузки? - PullRequest
1 голос
/ 01 апреля 2011

Я искал по этому вопросу, но информация, которую я нахожу, кажется слишком сложной для того, что я пытаюсь сделать, или включает необходимость точно указать, какой тип файла загружается, и использовать для этого определенный класс Java, яинтересно, есть ли способ не делать это и иметь возможность использовать один из способов сделать это независимо от типа файла, поскольку я не генерирую файл, а просто беру его из того места, где он находится в моем каталоге.У меня есть набор файлов в папке локально, скажем:

/media/files/files

, и в этом каталоге у меня есть различные файлы, .jpg, .doc..xls, .png и т. д. и я хочу получить самый простой способ, которым я могу взять заданный путь к файлу, извлечь его из каталога и отправить обратно в JSP, чтобы он позволил пользователю загрузить файл.Кажется, что информация, которую я нахожу, всегда включает десериализацию из большого двоичного объекта, извлечение из удаленного местоположения или что-то в этом роде, где код довольно длинный, и я полагаю, что должен быть довольно простой способ сделать то, что я пытаюсь сделатьделать, учитывая, что у меня есть файлы локально, и они в обычном формате (не в БД и т. д.)

Любой совет приветствуется

РЕДАКТИРОВАТЬ Благодаря Costi я думаю, что я на правильном путисейчас, но я попробовал это ниже, и все еще не могу получить доступ к файлу:

Я поместил это в мой файл server.xml в моем tomcat / conf:

<Context path="/files" docBase="/media/files/" />

, а затем попытался получить доступ к файлу на http://myip:8080/files/test.txt, но он не работает, в моем Spring.xml единственном отображении сервлетов, которое у меня есть:

<servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/d2/*</url-pattern>
    </servlet-mapping>

Любой совет очень ценится

ИСПРАВЛЕНО: забыли, что server.xml в Eclipse переопределяет server.xml на сервере tomcat, из-за чего он не работал

1 Ответ

2 голосов
/ 01 апреля 2011

Если вы не хотите, чтобы какая-либо логика заключалась в загрузке, вы можете просто сделать файлы доступными как статические ресурсы, при условии, что контейнер аутентификации / авторизации обрабатывается при необходимости.Чтобы это работало, вам просто нужно отобразить Spring DispatcherServlet, чтобы он не обрабатывал запросы к / media / files / , и одним простым способом добиться этого было бы сопоставить пружинный сервлет с некоторым расширением, например / .html или сопоставлены с подкаталогом вместо / .Таким образом, контейнер будет обрабатывать запросы к вашим / media / материалам и просто будет обслуживать статические файлы.

Если вам нужно как-то помешать загрузке (например, если вы обрабатываете аутентификацию внеконтейнер или вы хотите выполнить какое-либо действие до или после каждой загрузки), тогда вы можете получить View, возвращенный из вашего контроллера Spring, который просто передает запрашиваемый файл в выходной поток после установки соответствующих заголовков, таких как Content-Type, length, расположение и так далее.Я не знаю ни одного такого встроенного представления, но довольно легко создать его самостоятельно и, возможно, написать свой собственный ViewResolver, который будет возвращать экземпляр этого представления для имен файлов в /media/whwhat.

Надеюсь, это поможет.

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