servlet可以确定发布到它的数据是否为enctype =“multipart / form-data”?

时间:2008-09-15 20:07:33

标签: java servlets multipartform-data front-controller

我有一个servlet,用于Front Controller pattern中使用的许多不同操作。有谁知道是否可以判断回发的数据是否为enctype =“multipart / form-data”?在我决定之前,我无法读取请求参数,所以我无法将请求发送到适当的控制器。

有什么想法吗?

7 个答案:

答案 0 :(得分:18)

如果您打算尝试使用上面提到的request.getContentType()方法,请注意:

  1. request.getContentType()可能返回null。
  2. request.getContentType()可能不是等于到“multipart / form-data”,但可能只是从它开始。
  3. 考虑到这一点,您应该运行的检查是:

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

答案 1 :(得分:16)

是的,用户代理请求中的Content-type标头应包含multipart/form-data,如(至少)HTML4规范中所述:

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

答案 2 :(得分:8)

您可以调用方法来获取内容类型。

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”。

不要忘记:

  1. request.getContentType()可能返回null。

  2. request.getContentType()可能不等于“multipart / form-data”,但可能只是从它开始。

  3. 所以,考虑到这一切:

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

答案 3 :(得分:3)

ServletFileUpload实现了isMultipartContent()。也许您可以根据需要解除此实现(而不是通过开销来创建ServletFileUpload)。

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

答案 4 :(得分:1)

您必须阅读请求参数才能确定这一点,至少在某些级别上。 ServletRequest类有一个你想要查看的getContentType方法。

答案 5 :(得分:1)

要在awm129's answer上进行扩展-Apache commons的实现与此相对应:

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

您可以使用Apache Commons的org.apache.commons.lang3.StringUtils来写得短得多:

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

答案 6 :(得分:0)

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

java.util.Collection getParts()

抛出: ServletException-如果此请求的类型不是multipart / form-data