Pergunta

Eu tenho um servlet que é usado para muitas ações diferentes, usado no Padrão do controlador frontal.Alguém sabe se é possível saber se os dados postados de volta são enctype = "multipart/form-data"?Não consigo ler os parâmetros da solicitação até decidir isso, portanto não posso despachar a solicitação para o controlador adequado.

Alguma ideia?

Foi útil?

Solução

Sim o Content-type cabeçalho na solicitação do agente do usuário deve incluir multipart/form-data conforme descrito (pelo menos) na especificação HTML4:

http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2

Outras dicas

Se você for tentar usar o método request.getContentType() apresentado acima, esteja ciente de que:

  1. request.getContentType() pode retornar nulo.
  2. request.getContentType() pode não ser igual para "multipart/form-data", mas pode simplesmente começar com ele.

Com isso em mente, a verificação que você deve executar é:

if (request.getContentType() != null && request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1 ) {
// Multipart logic here
}

Você pode chamar um método para obter o tipo de conteúdo.

http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/ServletRequest.html#getContentType()

De acordo com http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2, o tipo de conteúdo será "multipart/form-data".

Não se esqueça disso:

  1. request.getContentType() pode retornar nulo.

  2. request.getContentType() pode não ser igual a "multipart/form-data", mas pode apenas começar com ele.

Então, com tudo isso em mente:

if (request.getContentType() != null && 
    request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1 ) 
{
    << code block >>
} 

ServletFileUpload implementa isMultipartContent().Talvez você possa melhorar essa implementação (em vez de passar pela sobrecarga para criar um ServletFileUpload) para suas necessidades.

http://www.docjar.com/html/api/org/apache/commons/fileupload/servlet/ServletFileUpload.java.html

Você terá que ler os parâmetros da solicitação para determinar isso, pelo menos em alguns nível.A classe ServletRequest possui um método getContentType que você deseja examinar.

Para expandir resposta de awm129 - A implementação do Apache Commons corresponde a isto:

if (request != null 
        && request.getContentType() != null 
        && request.getContentType().toLowerCase(Locale.ENGLISH).startsWith("multipart/")) {
    ...
}

Você pode escrever muito mais curto usando o Apache Commons ' org.apache.commons.lang3.StringUtils:

if (StringUtils.startsWithIgnoreCase(request.getContentType(), "multipart/")) { 
    ... 
}

https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#getParts()

java.util.Collection getParts()

Lança:ServletException - se esta solicitação não for do tipo multipart/form-data

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top