我不确定我是否可以表达我的问题,但是我相信它是特定于ColdFusion对某些AJAX表单数据的处理,尽管我引用了特定的JavaScript插件。
我正在尝试在ColdFusion 2011服务器上实现FilePond uploader,并且已经在前端进行了很好的配置(将文件上传到tmp文件夹就很好了),但是我的问题不知道如何使ColdFusion处理在每次上载时随其发送的额外元数据。在我看来,这些数据看起来不像普通的旧隐藏输入字段一样。
当我使用开发工具检查网络请求时,对我来说,它看起来与我处理过的其他表单不同。有两个“ filepond”条目,一个是JSON对象,另一个是二进制图像。当我
使用CF表单处理页面的输出进行更新:
第一行是Form.FilePond的输出。
2nd是表格的cfdump。
第3个是cfdump URL。
第4个是getHttpRequestData()的cfdump
答案 0 :(得分:1)
更新:
CF2016提交的错误(CF11的核心支持在2019年4月之后终止)
FORM
时,type=file
范围缺少值sameFormFieldAsArray
设置不适用于enctype="multipart/form-data"
经过一些测试,我认为这是ColdFusion错误。
在这种情况下似乎出现了问题
multipart/form-data
帖子type="file"
在这种情况下,ColdFusion似乎忽略了第一个文件字段之前的所有内容。 (如果您检查filepond source ut确认元数据字段在所有文件字段之前 提交)。这就是为什么在转储FORM范围时不显示元数据值的原因。
请注意,this.sameFormFieldsAsArray
设置无效,因为它不适用于multipart/form-data
请求。
下面是一个测试用例。注意,在第一个文件字段之后 出现相同的命名字段时,结果是您期望的结果?
<cfdump var="#form#" label="Form scope">
<form method="post" enctype="multipart/form-data">
<br>First:
<input type="file" name="fileFirst"><br>
<input type="text" name="fileFirst" value="Lions"><br>
<br>Last:
<input type="text" name="fileLast" value="Tigers"><br>
<input type="file" name="fileLast"><br>
<br>Middle:
<input type="text" name="fileMiddle" value="Bears"><br>
<input type="file" name="fileMiddle"><br>
<input type="text" name="fileMiddle" value="Oh My"><br>
<input type="submit">
</form>
This blog提供了使用FORM范围的未记录功能的解决方法。使用form.getPartsArray()
可以访问两个“ filePond”字段,从而使您可以提取放置的字段的值。这不是理想的方法,但是可以解决问题。
请记住,这是一个未记录的功能,因此请确保隔离代码以便更轻松地进行更改,以防Adobe将来更改或删除该功能(这是他们之前所做的,非常警告!)。
<cfscript>
// dump raw form fields
for (part in form.getPartsArray()) {
writeDump({ fieldName = part.getName()
, isFile = part.isFile()
, fieldValue = (part.isFile() ? part.getFileName() : part.getStringValue())
}
);
}
</cfscript>