我在表单标记中有一个按钮,用于生成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')
任何想法如何实现这一目标?
答案 0 :(得分:1)
生成CSV的程序需要为Content-Disposition
添加HTTP标头:
Content-Disposition: attachment; filename=<file name.ext>
答案 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
标题。