关于Java:Servlet是否可以确定发布的数据是否为multipart / form-data?

关于Java:Servlet是否可以确定发布的数据是否为multipart / form-data?

Can a servlet determine if the posted data is multipart/form-data?

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

有任何想法吗?


如果要尝试使用上面介绍的request.getContentType()方法,请注意:

  • request.getContentType()可能返回null。
  • request.getContentType()可能不等于" multipart / form-data",而只能以它开头。
  • 考虑到这一点,您应该运行的检查是:

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

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

    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",而只能以它开头。

  • 因此,请牢记所有这些:

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

    ServletFileUpload实现isMultipartContent()。也许您可以根据需要提高此实现(相对于创建ServletFileUpload的开销)。

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


    为了扩展awm129的答案-Apache commons的实现与此对应:

    1
    2
    3
    4
    5
    if (request != null
            && request.getContentType() != null
            && request.getContentType().toLowerCase(Locale.ENGLISH).startsWith("multipart/")) {
        ...
    }

    您可以使用Apache Commons的org.apache.commons.lang3.StringUtils来简化它:

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

    您必须至少在某种程度上读取请求参数才能确定该参数。 ServletRequest类具有您要查看的getContentType方法。


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

    java.util.Collection getParts()

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


    推荐阅读

      linux操作命令重命名?

      linux操作命令重命名?,图片,软件,名称,名字,文件,命令,状态,代码,工具,系统,L

      linux命令行模式登录?

      linux命令行模式登录?,系统,密码,信息,状态,情况,终端,环境,管理,电脑,位置,l

      linux命令模式加行?

      linux命令模式加行?,工作,地址,系统,命令,工具,正规,信息,时间,第一,模式,Lin

      linux命令行模式使用?

      linux命令行模式使用?,工作,地址,目录,信息,名称,系统,管理,命令,文件,标准,l

      数据库导出linux命令?

      数据库导出linux命令?,密码,数据,数据库,情况,地址,系统,工具,网上,名字,命

      linux里的操作命令?

      linux里的操作命令?,工作,系统,信息,地址,命令,标准,位置,目录,功能,操作,lin

      linux分辨率操作命令?

      linux分辨率操作命令?,系统,情况,分辨率,底部,状态,命令,屏幕,屏幕分辨率,

      linux命令行操作软件?

      linux命令行操作软件?,软件,工具,系统,名称,管理,工作,命令,设计,平台,标准,

      linux命令与数据流?

      linux命令与数据流?,工作,地址,系统,信息,命令,目录,标准,网络,管理,常用命

      linux常见操作命令?

      linux常见操作命令?,系统,工作,信息,管理,地址,命令,目录,单位,数据,标准,lin

      linux切换成命令模式?

      linux切换成命令模式?,密码,系统,工具,模式,命令,首页,状态,图形界面,终端,

      linux恢复数据库命令?

      linux恢复数据库命令?,工具,系统,软件,数据,盘中,密码,命令,备份,数据库,文

      linux储存命令数据?

      linux储存命令数据?,系统,工作,地址,信息,标准,命令,工具,实时,数据,分析,lin

      红帽子linux操作命令?

      红帽子linux操作命令?,服务,系统,密码,环境,信息,通用,软件,状态,设备,命令,

      linux命令行模式清页?

      linux命令行模式清页?,工作,系统,命令,信息,地址,目录,内容,文件,操作,功能,l

      linux储存命令数据?

      linux储存命令数据?,系统,工作,地址,信息,标准,命令,工具,实时,数据,分析,lin

      红帽子linux操作命令?

      红帽子linux操作命令?,服务,系统,密码,环境,信息,通用,软件,状态,设备,命令,

      linux进入命令行模式?

      linux进入命令行模式?,系统,地址,情况,工作,命令,终端,首页,信息,目录,界面,l

      linux命令大全数据库?

      linux命令大全数据库?,服务,系统,平台,状态,软件,通用,环境,数据,神州,地址,

      linux上数据库的命令?

      linux上数据库的命令?,服务,系统,信息,地址,命令,密码,工具,管理,数据,单位,