2

多亏了您的提示和 Ben Nadel 的 QueryToCSV 解决方案,我现在能够从我的查询中生成 CSV 文件。但是,我想允许用户选择保存生成文件的位置。该文件指出:

以下标记可以强制大多数浏览器显示一个对话框,询问用户是否要使用 filename 值指定的文件名保存 cfcontent 标记指定的文件的内容。如果用户选择打开文件,大多数浏览器会在相关应用程序中打开文件,而不是在浏览器窗口中打开。

<cfheader name="Content-Disposition" value="attachment; filename=filename.ext">

这适用于 PDF 文件,但我无法使其适用于 CSV 文件。目前我先将文件写入临时文件,然后调用 cfcontent,然后调用 cfheader:

<cffile
  action="WRITE"
  file="#filename#"
  output="#CSVString#"
/>

<cfcontent file="#filename#" type="text/plain" >
<cfheader name="Content-Disposition" value="attachment; filename=#filename#">

这可以将文件写入临时目录,然后写入浏览器窗口;但我不知道如何让用户选择保存位置。

4

2 回答 2

3

尝试text/csv代替text/plain您的内容类型?

浏览器会假设纯文本可以/应该显示在屏幕上,而他们(应该)询问用户如何处理 CSV 数据。

于 2011-11-09T21:08:48.053 回答
2

翻转它们:

<cfheader name="Content-Disposition" value="attachment; filename=#filename#">
<cfcontent file="#filename#" type="text/plain">

此外,根据您上面的代码,您不希望在这两个地方都使用 #filename# 变量,因为 #filename# 是<CFFILE>标签的输出目标,这意味着绝对完整路径(即 C:\temp \mycsvfile.csv),但是,这不是您在 Content-Disposition 标头中想要的 - 您需要文件名本身...'mycsvfile.csv'。您可能想为此提出第二个变量。

于 2011-11-09T21:14:02.500 回答