HttpServletRequest: Как определить Content-Type запрошенного ресурса - PullRequest
2 голосов
/ 08 августа 2010

Я пишу быстрый и грязный статический файловый сервер с использованием Jetty.Мне нужно установить тип содержимого для каждого ответа:

HttpServletResponse.setContentType("content/type");

Как правильно определить тип содержимого для данного запроса файла?Это вопрос изучения расширения файла, или есть более сложный метод?(Например, что если расширение файла отсутствует или расширение не отражает тип содержимого?)

Спасибо, Ричард

Ответы [ 3 ]

1 голос
/ 08 августа 2010

Разве вы не можете просто проверить заголовок запроса Content-Type и установить ответ на него?

Я не знаю, каких клиентов вы планируете поддерживать, но если они браузеры, думаю, с вами все будет в порядке. Если вы контролируете клиентов, то в любом случае рекомендуется отправлять вам этот заголовок.

Удачи!

0 голосов
/ 16 мая 2012

Поскольку вы используете объект HttpServletResponse в своем вопросе, я предполагаю, что у вас есть ServletContext, доступный вам в ваших контроллерах. Я только что решил эту же проблему, просто используя методы, доступные в servletContext.

Поскольку вы пишете файловый сервер, вы можете просто передать путь к файлу в методе getMimeType объекта ServletContext, и он должен вернуть mimeType, если он может определить его.

String path = "/js/example.js";
String mimeType = getServletContext().getMimeType(path);
resp.setContentType(mimeType);   // HttpServletResponse object

ПРИМЕЧАНИЕ. В этом конкретном примере задает тип содержимого "application-x / javascript".

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

0 голосов
/ 08 августа 2010

Вы можете использовать URLConnection.guessContentTypeFromStream

InputStream is = new BufferedInputStream(new FileInputStream(file));
mimeType = URLConnection.guessContentTypeFromStream(is);
...