module ActionController::DataStreaming

def send_file_headers!(options)

def send_file_headers!(options)
  type_provided = options.has_key?(:type)
  content_type = options.fetch(:type, DEFAULT_SEND_FILE_TYPE)
  raise ArgumentError, ":type option required" if content_type.nil?
  if content_type.is_a?(Symbol)
    extension = Mime[content_type]
    raise ArgumentError, "Unknown MIME type #{options[:type]}" unless extension
    self.content_type = extension
  else
    if !type_provided && options[:filename]
      # If type wasn't provided, try guessing from file extension.
      content_type = Mime::Type.lookup_by_extension(File.extname(options[:filename]).downcase.delete('.')) || content_type
    end
    self.content_type = content_type
  end
  disposition = options.fetch(:disposition, DEFAULT_SEND_FILE_DISPOSITION)
  unless disposition.nil?
    disposition  = disposition.to_s
    disposition += %(; filename="#{options[:filename]}") if options[:filename]
    headers['Content-Disposition'] = disposition
  end
  headers['Content-Transfer-Encoding'] = 'binary'
  response.sending_file = true
  # Fix a problem with IE 6.0 on opening downloaded files:
  # If Cache-Control: no-cache is set (which Rails does by default),
  # IE removes the file it just downloaded from its cache immediately
  # after it displays the "open/save" dialog, which means that if you
  # hit "open" the file isn't there anymore when the application that
  # is called for handling the download is run, so let's workaround that
  response.cache_control[:public] ||= false
end