ColdFusion是一个服务器端快速应用程序开发平台,实现了动态通用CFML编程语言。请在问题中包含CFML版本,操作系统和Web服务器。
ColdFusion 处理 HTML5 <input type="file" multiple="multiple" />
我正在尝试实现一个 HTML5 输入字段,让用户可以选择多个文件进行上传。我的表格中有以下内容: 我正在尝试实现一个 HTML5 输入字段,让用户可以选择多个文件进行上传。我的表格中有以下内容: <form method="post" enctype="multipart/form-data" action="index.cfm"> <input type="file" name="Images" id="Images" multiple="multiple" accept="image/jpeg, image/gif, image/png, application/zip" /> ... 我可以在浏览器中选择多个文件,然后单击上传,但我不确定如何使用 ColdFusion 处理表单发布。我认为以下方法可行,但这只会上传我选择的最后一个文件: <cfloop list="#attributes.Images#" index="Image"> <cffile destination = "#ExpandPath(Trim(request.TempFolder))#" filefield = "Images" action = "upload" nameconflict = "MakeUnique" result = "UploadedTempFile" > <cfoutput>#UploadedTempFile.serverFile#<br /></cfoutput> </cfloop> 有人可以向我解释如何遍历通过我的一个表单字段提交的所有文件,以便我可以单独处理这些文件吗? 在搜索了一些博客文章、遇到了这个问题并阅读了 Adobe 的文档之后,似乎一致认为 CF10 不支持“多个”文件上传支持(除非您使用的是 Flash 表单)。问题是,cffile 标签的“uploadall”值可能会上传所有文件,但您不会返回有关文件的结果数组。 这是我拼凑的一个函数,它利用了底层 Java 方法并在 ACF 10 中进行了测试。 <cffunction name="getUploadedFiles" access="public" returntype="struct" hint="Gets the uploaded files, grouped by the field name"> <cfset var local = { files = {}, types = "text/plain,text/csv,application/msexcel,application/vnd.ms-excel,application/octet-stream", tempFiles = form.getTempFiles(), idx = 0} /> <cfscript> arrayEach(form.getPartsArray(), function (field) { var local = {fieldName = field.getName(), destinationFile = ""}; // Make sure the field available in the form is also // available for the temporary files if (structKeyExists(tempFiles, fieldName)) { // Create the files of field array if it doesn't exist if (!structKeyExists(files, fieldName)) { files[fieldName] = []; } // If only 1 file was uploaded, it won't be an array - so make it one if (!isArray(tempFiles[fieldName])) { tempFiles[fieldName] = [tempFiles[fieldName]]; } // Check that the form part is a file and within our list of valid types if (field.isFile() && listFindNoCase(types, field.getContentType())) { // Compile details about the upload arrayAppend(files[fieldName], { file = tempFiles[fieldName][++idx], filePart = field, filename = field.getFileName(), filepath = field.getFilePath(), contentType = field.getContentType(), tempFile = tempFiles[fieldName][idx].getPath() }); } } }); </cfscript> <cfreturn local.files /> </cffunction> 跟随评论,这只是循环遍历所有表单部分,查找文件,并创建一个包含一些有用文件详细信息的数组(并根据我的应用程序要求按特定内容类型进行过滤)。 然后,我创建了 uploadFile 函数,它接受 fieldName 和 destinationPath 参数。我根据传入的字段获取上传文件的数组,遍历文件以确保目标文件路径不存在(如果存在则使其唯一),然后使用 java.xml 的内容写入目标文件。从临时上传中引用的 io.File 对象。 <cffunction name="uploadFile" access="public" returntype="array" hint="Uploads a file (or multiple files) from the form to the server"> <cfargument name="fieldName" type="string" required="true" /> <cfargument name="destinationPath" type="string" required="true" /> <cfset var local = {files = [], filepaths = [], allFiles = getUploadedFiles()} /> <cfif structKeyExists(local.allFiles, arguments.fieldName)> <cfset local.files = local.allFiles[arguments.fieldName] /> </cfif> <cfloop array="#local.files#" index="local.file"> <cfset local.file.destinationFile = arguments.destinationPath & local.file.fileName /> <cfif fileExists(local.file.destinationFile)> <cfset local.file.destinationFile = listFirst(local.file.destinationFile, ".") & "_#getTickCount()#.csv" /> </cfif> <cfset fileWrite(local.file.destinationFile, fileRead(local.file.file)) /> <cfset arrayAppend(local.filePaths, local.file.destinationFile) /> </cfloop> <cfset setActiveFileName(local.filePaths[arrayLen(local.filePaths)]) /> <cfreturn local.filePaths /> </cffunction> 现在我可以完全控制所有正在上传的文件,并且可以处理所需的结果。 更新:从 ColdFusion 9 开始,这是真的。这已在 ColdFusion 10 中得到纠正。 结束我们的评论对话: 这对于默认的 ColdFusion 行为来说根本不可能。 cffile 不支持处理来自单个 file 元素的多个文件上传。我认为有可能回退到 JAVA 来做到这一点,但我不知道如何做到这一点。 我很想cffile action="uploadall" 抓取所有HTML5 多文件元素。需要将其归档为 CF10 的 ER :). fileUploadAll()/<cffile action="uploadAll">允许您上传所有文件,也可以上传<input type="file" multiple>.的多个文件 尽管它总是处理请求的all文件,即它不区分不同的文件输入,您可能希望以不同的方式处理这些文件,例如通过 accept 参数设置不同的允许 MIME 类型或将文件上传到每个输入的不同位置。 因此,我在 Adobe ColdFusion 和 Lucee 问题跟踪器 上创建了增强请求。 基本思路是改变fileUpload()函数和<cffile action="upload">如果表单域有多个文件自动返回一个数组,或者如果这导致兼容性问题,添加一个新的参数multiple默认为false控制. 是的,它适用于 CF-2018。试试这个用于多文件上传。 <cfif isdefined("form.submit")> <cffile action="uploadall" destination="#expandpath(".")#" nameconflict="MakeUnique" accept="image/png,image/jpeg,.png,.jpg,.jpeg" strict="true" result="fileUploaded" allowedextensions=".png,.jpg,.jpeg" > <cfloop array="#fileUploaded#" item="item"> <br><cfdump var="#filegetmimetype(item.serverdirectory&'/'&item.serverfile)#"> <br><a href="<cfoutput>#item.serverfile#</cfoutput>"><cfoutput>#item.serverfile#</cfoutput></a> </cfloop> </cfif> <h3>Upload multiple files.</h3> <cfform method="POST" action="#CGI.SCRIPT_NAME#" enctype="multipart/form-data"> <cfinput type="file" name="Images" multiple="multiple" accept="image/jpeg, image/gif, image/png, application/zip" /><br /> <cfinput type="submit" name=" submit" value="submit"> </cfform>
当被 javascript 获取时,查询输出从 Lucee (CFML) 混合在一起
我有以下代码.. 异步函数 updateItems() { 等待获取('http://127.0.0.1/WebProjects/LARPLookup/Actions/Game/Items.cfm') .then(响应=> response.text()) .then((重新...
下面的工作查询用于下一个失败的代码部分: 选择 下面的工作查询用于下一个失败的代码部分: <cfquery name="q_GetAnalyticsSect" datasource="#THIS.DSN#"> SELECT <cfloop from="1" to="11" index="i"> SUM(CASE WHEN YEAR = #thisYear# AND MONTH = #i# THEN VIEWS ELSE 0 END) #monthArr[i]#, </cfloop> SUM(CASE WHEN YEAR = #thisYear# AND MONTH = 12 THEN VIEWS ELSE 0 END) December FROM SYSTEM_ANALYTICS </cfquery> 注意: 一个。 monthArr 只是使用数字的每个月名称(一月到十二月)。 乙。 SUM(CASE..) 语句执行为: SUM(CASE WHEN YEAR = 2023 AND MONTH = 1 THEN VIEWS ELSE 0 END) January, SUM(CASE WHEN YEAR = 2023 AND MONTH = 2 THEN VIEWS ELSE 0 END) February, …… through December 查询后,我尝试使用以下过程从每个查询列中检索值: <cfset sectionArr = ArrayNew(1)> <cfloop query="q_GetAnalyticsSect"> <cfloop from="1" to="12" index="i"> <cfset sectionArr[i] = q_GetAnalyticsSect.monthArr(i)> </cfloop> </cfloop> 但是,我得到错误: 元素 MONTHARR 在 Q_GETANALYTISSSECT 中未定义 我可以列出所有 12 个陈述: <cfset sectionArr[1] = q_GetAnalyticsSect.January)> <cfset sectionArr[2] = q_GetAnalyticsSect.February> .... <cfset sectionArr[12] = q_GetAnalyticsSect.December> 但我希望逻辑适用于其他项目。 ColdFusion 似乎明确使用了数组变量名 (.monthArr(i)) 而不是数组值 (January..December)! 因此我需要代码来使用实际的数组值作为查询列。 我该怎么做? 这是我从ChatGPT得到的答案: <cfset sectionArr[i] = q_GetAnalyticsSect[monthArr[i]][q_GetAnalyticsSect.currentRow]> 成功了!随意发布任何其他解决方案。
vscode - 特定于语言的注释块字符(以便可以识别#region 进行折叠)
我在 vscode 中使用 ColdFusion。在 CF 中,注释块类似于 HTML,除了它有额外的第三个 - ,如下所示: 我想利用 vscode 识别#region [....
CFML / Fusebox 5.5:解析引擎无法(有时)关闭 CFIF 标签
这是 Fusebox 5.5.1 应用程序。出于某种原因,虽然我多年来一直在使用 Fusebox,但最近我遇到了一个新问题。 解析引擎似乎偶尔想(和解析一样...
我正在使用 Lucee 生成 pdf。 PDF 超过 1 页。每当生成 pdf 时,页眉和页脚都不会进入每个 .它只是来到 pdf 的最后一页。我附上了...
我有 2 个数组: firstArr = [“披萨”、“意大利面”、“鸡汤”、“炸薯条”] secondArr = [8, 6, 6, 9] 现在我像这样对第二个数组进行排序: secondArr = [...
cfspreadsheet可以从查询中输出空值而不将其改为空白吗?
我正在运行一个SQL查询来抓取一些数据。然后使用CF的电子表格函数将其导出为Excel文件。问题是,查询中为空的单元格在...中得到一个非空字符。
我需要一个关于KendoUI Treeview的小帮助。我正在研究KendoUI Treeview代码。这里有FactorTypes作为父类,Factors作为子类。所以,如果我选择了FactorType,所有的Factors在下面...
我有一个函数,不会执行里面的cffunction,每次我在开发工具中检查网络时,脚本都不会被执行。每次我在开发工具中检查网络时,脚本都不会被执行。
我想修改一个现有的查询来使用REGEXP_LIKE,但由于我对一些语法理解不到位,所以落下了一些毛病。我们目前在Oracle数据库中使用CF查询,查询结果如下: result = ...
我们可以在Coldfusion 2016和Coldfusion 2018 CF Admin中安装CF-CertMan吗? https:/github.comcfmaniacCF-CertMan。
首先STAY HOME STAY SAFE! 我在ColdFusion上需要一些帮助,我试图创建一个封面页,然后在审稿人旁边添加批准印章。然而,我可以在页面上添加印章......
如何在coldfusion中使用<cfimap>将邮件移动到子文件夹。
我正在使用下面的代码,但它没有工作,没有错误的到来,但电子邮件没有移动到推荐的文件夹。
在CF9中是否有替代SpreadSheetAddAutoFilter()的方法?
我在CF9中使用cfspreadsheet,我需要启用自动过滤器,但是在CF11中添加了SpreadSheetAddAutoFilter()函数。升级是不可能的。有什么方法可以完成这个任务吗?
我正在使用以下查询从sql查询中输出XML select * from author FOR XML RAW, ROOT ('data'), ELEMENTS XSINIL 数据如期而至,从CF的角度来看,我正在使用这...
我正试图建立我们自己的内部URL缩短服务,因为显示许多主要的是被封锁为垃圾邮件(我们现在使用bit.ly)。我想做的是有一个URL的ID附加......
我如何在 ColdFusion 中设置 XML 文档的编码?
我正在使用以下方法创建XML对象 : :ACME
我看到很多方法可以找到重复的记录并删除它们,但我找不到我正在寻找的方法,即根据特定条件删除它们。下面的第一个SQL代码取自......
我需要在Coldfusion中旋转一个图像,然后一旦旋转,它就会以新的旋转方式更新文件。到目前为止,这是我所拥有的。 &amp;...