【问题标题】:Coldfusion - allow user to choose where to save generated csv fileColdfusion - 允许用户选择保存生成的 csv 文件的位置
【发布时间】:2011-11-11 02:00:54
【问题描述】:

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

以下标签可以强制大多数浏览器显示询问用户的对话框 他们是否要保存由 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#">

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

【问题讨论】:

    标签: coldfusion file-storage


    【解决方案1】:

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

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

    【讨论】:

    • D'oh - 不知道这是一个选项 - ColdFusion Builder 没有将其列为一个选项,也没有在文档中看到它。这确实给了我一个提示,但我无法选择保存位置或文件名称 - 我的选项是“使用 [select] 打开”、“保存文件”和取消。没有其他选择。
    • 这是一个浏览器设置 - 您需要找到与下载相关的选项并将其设置为“每次都询问我”(或类似),然后“保存文件”选项将让您这样做.
    • 啊,我当时脑子都冻僵了。了解可用的 mime 类型(而不依赖于 CF Builder)会很有帮助:iana.org/assignments/media-types/text/index.html
    【解决方案2】:

    翻转它们:

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

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

    【讨论】:

    • 好的,谢谢,知道了。该文件仍会保存到“下载”文件夹中 - 是否无法更改保存位置?
    猜你喜欢
    • 1970-01-01
    • 2013-03-27
    • 2020-06-04
    • 1970-01-01
    • 2017-01-20
    • 2019-04-30
    • 1970-01-01
    • 2016-05-27
    • 2011-05-19
    相关资源
    最近更新 更多