У меня есть сервлет, который используется для множества различных действий, используемых в Шаблон переднего контроллера. Кто-нибудь знает, можно ли определить, являются ли отправленные обратно данные enctype = "multipart / form-data"? Я не могу прочитать параметры запроса, пока не решу это, поэтому я не могу отправить запрос соответствующему контроллеру.
Есть идеи?




Да, заголовок Content-type в запросе пользовательского агента должен включать multipart/form-data, как описано (по крайней мере) в спецификации HTML4:
http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
Вы можете вызвать метод, чтобы получить тип контента.
http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/ServletRequest.html#getContentType ()
Согласно http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2, тип контента будет "multipart / form-data".
Не забывайте, что:
request.getContentType () может возвращать null.
request.getContentType () может не совпадать с multipart / form-data, но может просто начинаться с него.
Итак, имея в виду все это:
if (request.getContentType() != null &&
request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1 )
{
<< code block >>
}
Вам нужно будет прочитать параметры запроса, чтобы определить это, по крайней мере, на уровне немного. У класса ServletRequest есть метод getContentType, на который вы захотите взглянуть.
Если вы собираетесь попробовать использовать метод request.getContentType (), представленный выше, имейте в виду, что:
Имея это в виду, вам следует выполнить следующую проверку:
if (request.getContentType() != null && request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1 ) {
// Multipart logic here
}
ServletFileUpload реализует isMultipartContent (). Возможно, вы сможете поднять эту реализацию (в отличие от накладных расходов на создание ServletFileUpload) для своих нужд.
http://www.docjar.com/html/api/org/apache/commons/fileupload/servlet/ServletFileUpload.java.html
https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#getParts ()
java.util.Collection getParts ()
Броски: ServletException - если этот запрос не относится к типу multipart / form-data
Чтобы расширить awm129 ответ - реализация сообщества Apache соответствует этому:
if (request != null
&& request.getContentType() != null
&& request.getContentType().toLowerCase(Locale.ENGLISH).startsWith("multipart/")) {
...
}
Вы можете написать его намного короче, используя org.apache.commons.lang3.StringUtils Apache Commons:
if (StringUtils.startsWithIgnoreCase(request.getContentType(), "multipart/")) {
...
}
Кайл, вы изменили свой ответ на мой после того, как я отправил ответ правильный. Возможно, хотя бы ссылка на этот факт может быть крутой ...