【发布时间】:2011-11-28 17:43:11
【问题描述】:
我正在使用 Rails 3.1.0.rc8 和 Chromium 15.0.874.102。
我想设置 CSV 下载的文件名。我正在关注这个SO solution,但发现自己无法修改Content-Disposition 标头的filename。
这是我的代码:
module ActionController
module CSVHelper
def render_csv options={}
if request.env['HTTP_USER_AGENT'] =~ /msie/i
headers['Pragma'] = "public"
headers['Content-Type'] = "text/plain"
headers['Cache-Control'] = "no-cache, must-revalidate, post-check=0, pre-check=0"
headers['Expires'] = "0"
else
headers['Content-Type'] = "text/csv"
end
filename = generate_filename options.delete(:basename)
headers['Content-Disposition'] = "attachment; filename=#{filename}"
end
def generate_filename basename=nil, suffix="csv"
filename = basename || params[:action]
filename << ".#{suffix}"
filename
end
end
end
在我的控制器中:
respond_to do |format|
format.html
format.csv do
render_csv(:basename => "my_filename")
Rails.logger.debug "HEADERS: #{headers.to_s}"
end
end
在我的日志中:
[2011-11-28 12:25:49.611] DEBUG - HEADERS: {"Content-Type"=>"text/csv", "Content-Disposition"=>"attachment; filename=my_filename.csv"}
在 Chromium 网络检查器工具中,我在响应标头中看到以下内容:
Content-Type: text/plain
Content-Disposition: attachment; filename=index.csv
如果我将Content-Type 更改为foo/bar,我会在我的网络检查器工具中看到更改。无论我将filename 设置为什么,它仍然是index.csv。
谢谢, 最大
【问题讨论】:
-
您的视图设置正确吗?
-
视图按预期呈现,如果这就是您的意思;下载文件的内容看起来像我想要的
标签: ruby-on-rails-3 http-headers chromium fastercsv content-disposition