X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/07e84496255ebd1d53108894e0fb8ce98b55ccee..f3f1687fa300971c793d59e0ae52c81d1076a02a:/config/initializers/streaming.rb?ds=sidebyside diff --git a/config/initializers/streaming.rb b/config/initializers/streaming.rb index 116ca51dd..0c27ba2e7 100644 --- a/config/initializers/streaming.rb +++ b/config/initializers/streaming.rb @@ -1,29 +1,21 @@ -# Hack ActionController::Streaming to allow streaming from a file handle +# Hack ActionController::DataStreaming to allow streaming from a file handle module ActionController - module Streaming - alias_method :old_send_file, :send_file + module DataStreaming + alias old_send_file send_file def send_file(file, options = {}) - if file.is_a? File or file.is_a? Tempfile - options[:length] ||= file.stat.size + if file.is_a?(File) || file.is_a?(Tempfile) + headers["Content-Length"] ||= file.size.to_s + options[:filename] ||= File.basename(file.path) unless options[:url_based_filename] send_file_headers! options - @performed_render = false - - if options[:stream] - render :status => options[:status], :text => Proc.new { |response, output| - logger.info "Streaming file #{file.path}" unless logger.nil? - len = options[:buffer_size] || 4096 - while buf = file.read(len) - output.write(buf) - end - } - else - logger.info "Sending file #{file.path}" unless logger.nil? - render :status => options[:status], :text => file.read - end + self.status = options[:status] || 200 + self.content_type = options[:content_type] if options.key?(:content_type) + self.response_body = file else + headers["Content-Length"] ||= File.size(file).to_s + old_send_file(file, options) end end