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

pka*_*ing 10 java servlets multipartform-data front-controller

我有一个servlet,用于许多不同的操作,在前端控制器模式中使用.有谁知道是否可以判断回发的数据是否为enctype ="multipart/form-data"?在我决定之前,我无法读取请求参数,因此我无法将请求分派给适当的控制器.

有任何想法吗?

Dar*_*cks 20

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

  1. request.getContentType()可能返回null.
  2. request.getContentType()可能不等于 "multipart/form-data",但可能只是从它开始.

考虑到这一点,您应该运行的检查是:

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


Lor*_*gal 16

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

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


Kyl*_*oon 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",但可能只是从它开始.

所以,考虑到这一切:

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

  • 凯尔,在我提交了*正确的答案后,你改变了答案,成为我的答案.也许至少引用这个事实可能很酷...... (2认同)