gpt4 book ai didi

ruby-on-rails-3 - 在 rails 中,无法覆盖内容处置文件名

转载 作者:行者123 更新时间:2023-12-04 10:05:20 28 4
gpt4 key购买 nike

我正在使用 Rails 3.1.0.rc8 和 Chromium 15.0.874.102。

我想设置 CSV 下载的文件名。我正在关注这个 SO solution ,却发现自己无法修改filenameContent-Disposition标题。

这是我的代码:

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

在我的 Controller 中:
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 网络检查器工具中,我在响应 header 中看到以下内容:
Content-Type: text/plain
Content-Disposition: attachment; filename=index.csv

如果我更改 Content-Type类似于 foo/bar ,我在我的网络检查器工具中看到了变化。不管我怎么设置 filename到,它仍然是 index.csv .

谢谢,
最大限度

最佳答案

根据Content-Disposition section of the appendices to the HTTP/1.1 specification文件名必须是带引号的字符串:

   filename-parm = "filename" "=" quoted-string
...

An example is

   Content-Disposition: attachment; filename="fname.ext"


因此,您可能需要进行以下更改(注意引号):

headers['Content-Disposition'] = "attachment; filename=\"#{filename}\""

关于ruby-on-rails-3 - 在 rails 中,无法覆盖内容处置文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8299994/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com