如何在Windows IE中单击时使文件“下载”

时间:2011-02-09 19:17:44

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

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

当我尝试在IE中完成此操作时,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>

My Rails Controller:

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

任何想法如何实现这一目标?

3 个答案:

答案 0 :(得分:1)

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

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

请参阅http://www.jtricks.com/bits/content_disposition.html

答案 1 :(得分: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' %>

答案 2 :(得分:0)

要提示浏览器应下载文件,请务必从应用程序发送Content-Disposition: attachment标题。