使用cfinclude从母版页调用页面时,导出到CSV不起作用

时间:2017-04-02 02:35:24

标签: csv coldfusion

<cffunction name="QueryToCSV" access="public" returntype="string" output="false" hint="I take a query and convert it to a CSV string.">
....
</cffunction>

<cfquery name="pull_call_label" datasource="callmeasurement">
    SELECT refname, lskinid FROM lskin where isactive = 1
</cfquery>

<cfif isDefined('URL.export')>

<cfset strFilePath = GetTempFile(GetTempDirectory(),"excel_") />
<!--- Write the excel data to the file. --->

<cffile action="WRITE" file="#strFilePath#" output="#QueryToCSV(pull_call_label, "refname, lskinid")#"/>

<cfheader name="Content-Disposition" value="attachment; filename=report.csv"/>
<cfcontent type="application/csv" file="#strFilePath#" deletefile="true"/>

</cfif>

<cfoutput>
   <a href="#CGI.script_name#?export=csv">export</a>
</cfoutput>

此代码位于名为&#34; staff-report.cfm&#34;的文件中。它在我的测试环境中完全正常工作。在我的测试环境中,我只有这个文件。当你点击按钮&#34;导出&#34;它会自动创建并下载包含查询结果的CSV文件。

然而,在我的真实项目中,文件&#34; staff-report.cfm&#34;包含(使用cfinclude)另一个名为&#34; report-viewer.cfm&#34;的文件,现在文件&#34; staff-report.cfm&#34;来自&#34; report-viewer.cfm&#34;文件。现在,当我按下按钮&#34;导出&#34;时,它不会下载文件,但会将CSV文件的内容粘贴到我的&#34; report-viewer.cfm&#34;绝对不是我想要的页面。 如果有人可以帮助如何在ColdFusion中实现这一目标,我将非常感激。换句话说,当我按下&#34;导出&#34;按钮如何强制浏览器下载CSV文件而不创建它并将其返回到&#34; report-viewer.cfm&#34;文件谁叫它? 注意:我的方案中没有办法摆脱cfinclude标记并将所有内容放在同一页面上。

1 个答案:

答案 0 :(得分:2)

如果你cfincluding这个,我打赌其他内容已排队等待发送到浏览器并且标题已经完成 - 现在已经太晚了现在添加一个而不重置输出管道。你可以尝试:

<cfcontent reset="true">