31 lines
1,022 B
Ruby
31 lines
1,022 B
Ruby
# Hack ActionController::Streaming to allow streaming from a file handle
|
|
module ActionController
|
|
module Streaming
|
|
alias_method :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
|
|
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
|
|
else
|
|
old_send_file(file, options)
|
|
end
|
|
end
|
|
end
|
|
end
|