【问题标题】:How to make a file 'download' when clicked in Windows IE在 Windows IE 中单击时如何使文件“下载”
【发布时间】:2011-02-09 19:17:43
【问题描述】:

我在表单标签中有一个按钮,它生成一个 CSV 文件并在用户单击它时提示下载。

当我尝试在 IE 中完成此操作时,IE 会尝试使用它不应该打开的文件。我只是想让它下载文件。

我的 HTML:

<FORM accept-charset="UTF-8" method="post" action="/generate_csv?calc[]total_interest=189.08">
  <DIV style="margin: 0px; padding: 0px; display: inline;"><INPUT name="utf8" value="✓" type="hidden">
    <INPUT name="authenticity_token" value="4o1dEDoFbbDoc3scpnhDaQpPtpFM5NitTOrYQA0AU5k=" type="hidden">
  </DIV>
  <INPUT id="print_csv" name="commit" value="Print CSV" type="submit">
</FORM>

我的 Rails 控制器:

headers['Content-Disposition'] = "attachment;"
send_data(csv_string,
  :type => 'text/csv; charset=utf-8; header=present; disposition=attachment',
  :filename => @filename,
  :disposition => 'attachment')

任何想法如何做到这一点?

【问题讨论】:

    标签: html ruby-on-rails css internet-explorer download


    【解决方案1】:

    我会尝试以下方法。在您的控制器中,当您生成 CSV 文件时,您可能使用 send_data 或 send_file 发送它。那是对的吗?如果是这样,您可能需要将处置设置为“附件”,而不是简单地发送文件或数据。例如:

    send_data @csv, :type => 'text/csv', :disposition => 'attachment', :filename => 'generate_csv.csv'
    

    send_file '/path/to.csv', :type => 'text/csv', :disposition => 'attachment'
    

    您可以做的另一件事是修改您的路线以包含格式。例如:

    match 'generate_csv.csv' => 'csv#generate_csv'
    

    您可以像这样将您的发布请求转换为获取请求:

    <%= link_to "Print CSV", '/generate_csv?calc[]total_interest=189.08' %>
    

    【讨论】:

    • 啊,太好了,我将那些send_data 与faster_csv 一起使用,就像你提到的那样,我添加了处置附件变量,但它似乎没有帮助。
    • 会不会是因为它来自提交按钮?
    • 有可能。您是否尝试过将其设为简单的 link_to 或 GET 请求?
    • 我要做的另一件事是在您的浏览器中打开 Firebug 或 Chrome 开发人员工具,并确保您可以看到从您的应用程序返回的“Content-Disposition: attachment”标头。如果不能,这可能意味着标头在某处被删除(可能在 Nginx 或 Apache 中)。
    • @Pan 好点。不,我没有在标题中看到内容处置。只是 UTF-8。
    【解决方案2】:

    生成CSV的程序需要为Content-Disposition添加一个HTTP头:

     Content-Disposition: attachment; filename=<file name.ext>
    

    http://www.jtricks.com/bits/content_disposition.html

    【讨论】:

      【解决方案3】:

      要提示浏览器应该下载文件,请确保从应用程序中发送 Content-Disposition: attachment 标头。

      【讨论】:

        猜你喜欢
        • 2015-11-13
        • 2012-08-20
        • 2011-05-29
        • 1970-01-01
        • 2018-06-25
        • 1970-01-01
        • 2019-10-20
        • 1970-01-01
        相关资源
        最近更新 更多