2011-11-09 52 views
2

感谢您的提示和Ben Nadel的QueryToCSV解决方案,我现在可以从我的查询中生成CSV文件。不过,我想让用户选择保存生成文件的位置。该文件指出:Coldfusion - 允许用户选择保存生成的csv文件的位置

下面的标签可以迫使大多数浏览器显示,要求用户 是否要保存使用文件名cfcontent标签 指定的文件由filename指定内容的对话框值。如果用户选择打开 该文件,则大多数浏览器在相关应用程序中打开文件,而不是浏览器 窗口。

<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#"> 

这个工程将文件写入到临时目录,然后在浏览器窗口;但我无法弄清楚如何让用户选择保存位置。

回答

3

尝试text/csv而不是text/plain为您的内容类型?

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

+0

D'oh - 不知道这是一个选项 - ColdFusion Builder没有列出它,并没有在文档中看到它。这确实给了我一个提示,但我无法选择保存位置或命名文件 - 我的选项是“用[选择]打开”,“保存文件”和“取消”。没有其他选择。 – earachefl

+1

这是一个浏览器设置 - 您需要找到与下载相关的选项,并将其设置为“每次询问我”(或类似),然后使用“保存文件”选项可让您执行此操作。 –

+0

啊,我脑部冻结了。知道可用的MIME类型(而不是依赖于CF生成器)证明是有帮助的:http://www.iana.org/assignments/media-types/text/index.html – earachefl

2

翻转他们身边:

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

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

+0

好的,谢谢,明白了。该文件仍然保存到Downloads文件夹中 - 是否无法更改保存位置? – earachefl

+0

这取决于您的浏览器设置,而不是cf代码。 – Leigh

相关问题