diff --git a/actionpack/lib/action_controller/base.rb b/actionpack/lib/action_controller/base.rb index 9b4b729e8d..288e6d2912 100755 --- a/actionpack/lib/action_controller/base.rb +++ b/actionpack/lib/action_controller/base.rb @@ -1087,7 +1087,11 @@ module ActionController #:nodoc: def assign_default_content_type_and_charset response.content_type ||= Mime::HTML - response.charset ||= self.class.default_charset + response.charset ||= self.class.default_charset unless sending_file? + end + + def sending_file? + response.headers["Content-Transfer-Encoding"] == "binary" end def action_methods diff --git a/actionpack/test/controller/send_file_test.rb b/actionpack/test/controller/send_file_test.rb index a4617cbf5a..83590fd73e 100644 --- a/actionpack/test/controller/send_file_test.rb +++ b/actionpack/test/controller/send_file_test.rb @@ -63,6 +63,14 @@ class SendFileTest < Test::Unit::TestCase assert_equal file_data, response.body end + def test_headers_after_send_shouldnt_include_charset + response = process('data') + assert_equal "application/octet-stream", response.headers["Content-Type"] + + response = process('file') + assert_equal "application/octet-stream", response.headers["Content-Type"] + end + # Test that send_file_headers! is setting the correct HTTP headers. def test_send_file_headers! options = {