Tôi đang sử dụng Rails 3.1.0.rc8 và Chromium 15.0.874.102.trong đường ray, không thể ghi đè lên tên tệp nội dung bố trí
Tôi muốn đặt tên tệp của bản tải xuống CSV. Tôi đang theo dõi số SO solution này, nhưng thấy mình không thể sửa đổi số filename
của tiêu đề Content-Disposition
.
Đây là mã của tôi:
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
Và trong bộ điều khiển của tôi:
respond_to do |format|
format.html
format.csv do
render_csv(:basename => "my_filename")
Rails.logger.debug "HEADERS: #{headers.to_s}"
end
end
Trong log của tôi:
[2011-11-28 12:25:49.611] DEBUG - HEADERS: {"Content-Type"=>"text/csv", "Content-Disposition"=>"attachment; filename=my_filename.csv"}
Trong Chromium công cụ thanh tra mạng, tôi thấy sau đây trong Tiêu đề phản hồi của tôi:
Content-Type: text/plain
Content-Disposition: attachment; filename=index.csv
Nếu tôi thay đổi Content-Type
thành một cái gì đó như foo/bar
, tôi thấy sự thay đổi đến trong công cụ kiểm tra mạng của tôi. Bất kể tôi đặt số filename
là gì, nó vẫn là index.csv
.
Cảm ơn, Max
bạn có thiết lập chính xác chế độ xem không? – baol
chế độ xem hiển thị như mong đợi, nếu đó là ý của bạn; nội dung của tệp được tải xuống trông giống như tôi muốn – maxenglander