我有一个servlet,用于Front Controller pattern中使用的许多不同操作。有谁知道是否可以判断回发的数据是否为enctype =“multipart / form-data”?在我决定之前,我无法读取请求参数,所以我无法将请求发送到适当的控制器。
有什么想法吗?
答案 0 :(得分:18)
如果您打算尝试使用上面提到的request.getContentType()方法,请注意:
考虑到这一点,您应该运行的检查是:
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”。
不要忘记:
request.getContentType()可能返回null。
request.getContentType()可能不等于“multipart / form-data”,但可能只是从它开始。
所以,考虑到这一切:
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