java - getPageContext().getRequest().getParameterMap() 与多部分形式?

标签 java coldfusion multipartform-data

下面是我用来测试的代码:

<cfif structkeyexists(form, "submitted")>
    <cfdump var="#getPageContext().getRequest().getParameterMap()#">
</cfif>

<cfoutput>
<form method="post" action="#cgi.script_name#?firstname=tony">
    <input type="text" size="50" name="page[contents][][content]">
    <input type="text" size="50" name="page[contents][][content]">
    <input type="hidden" name="submitted" value="1">
    <input type="submit">
</form>
</cfoutput>

我们正在做的是使用 getPageContext().getRequest().getParameterMap() 在 post 请求期间检索表单和 url 范围的散列。现在这项工作一切正常,花花公子,直到您将表单的 enctype 属性设置为“multipart/form-data ”,如下所示:

<cfif structkeyexists(form, "submitted")>
    <cfdump var="#getPageContext().getRequest().getParameterMap()#">
</cfif>

<cfoutput>
<form method="post" action="#cgi.script_name#?firstname=tony" enctype="multipart/form-data‎">
    <input type="text" size="50" name="page[contents][][content]">
    <input type="text" size="50" name="page[contents][][content]">
    <input type="hidden" name="submitted" value="1">
    <input type="submit">
</form>
</cfoutput>

此时发生的是从 getPageContext().getRequest().getParameterMap() 返回的散列中没有返回任何表单字段值。

有谁知道我们可以在哪里或如何获取这些数据或解决方法?

我们使用 getPageContext().getRequest().getParameterMap() 的全部原因是因为它返回一个数组作为变量的值,而不是像使用表单范围那样返回逗号分隔的列表。

更新:这是在 8.0.1 上应用了累积修补程序 4。

更新:您不能使用 listToArray 的原因是假设您有两个名为 firstname 的字段并且用户为这两个字段(1 和 2)输入了值. CF 将做的是以名为 firstname 的结构形式返回一个键,其中包含两个值 (1,2) 的逗号分隔列表。这很好,但是假设用户在包含逗号的字段中输入值,例如第一个字段为 1,2,3,4,第二个字段为 5,6,7,8。 firstname 的表单结构中的值将是 1,2,3,4,5,6,7,8这是不正确的。现在因为 getParameterMap() 返回值的数组,我会有两个元素,像这样:["1,2,3,4","5,6,7,8"].

更新:尝试查看 getHttpRequestData().content 会根据 Leigh 的建议返回什么。它似乎是一个空白的二进制文件。

更新:感谢 Leigh 解决了这个问题并且没有完全使用 getPageContext。诀窍是在表单范围内使用 getPartsArray() 方法。我什至不知道这个存在!

请让想法不断涌现!

最佳答案

(好吧.. 拿两个)这似乎适用于 CF9。我目前无法使用 CF8 对其进行测试。你能试一试吗?

<cfif structkeyexists(form, "submitted")>
   <!--- if this is a multipart request ...--->
   <cfset variables.parts = form.getPartsArray()>
   <cfif structKeyExists(variables, "parts")>
      <cfoutput>   
      <cfloop array="#variables.parts#" index="p">
         <cfif p.isParam()>
            isParam() = #p.isParam()# <br />
            getName() = #p.getName()# <br />
            stringValue() = #p.getStringValue()# <hr />
         </cfif>
      </cfloop>
      </cfoutput>
   </cfif>
</cfif>

关于java - getPageContext().getRequest().getParameterMap() 与多部分形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2194442/

相关文章:

java - 比 onLoadResource 更快的方法将 javascript 注入(inject)到 webview 中?

java - fluidwait<webdriver> 类型中的 withtimeout(duration) 方法不适用于参数 (int, timeunit)

arrays - 如何在 “pool”线程之间划分值范围?

jquery - ColdFusion UI 标签到 jQuery 的转换

javascript - POSTMAN PUT 请求不更新值

java - 两个不同长度的字符串可以有相同的哈希码吗?

java - 将文件读入 Spring Controller 。使用相对路径

ssl - 在 ColdFusion 中使用自签名证书通过 HTTPS 进行 Web 服务?

python - 使用 request.post 通过 python 发布多部分表单数据不起作用

java - 在 spring boot 2.0.5 中将具有不同数据类型的图像从 Angular 7 发送到 Rest API