instance method
send_stream
Ruby on Rails 7.1.6
Since v7.0.10Signature
send_stream(filename:, disposition: "attachment", type: nil)
Sends a stream to the browser, which is helpful when you’re generating exports or other running data where you don’t want the entire file buffered in memory first. Similar to send_data, but where the data is generated live.
Options:
-
:filename- suggests a filename for the browser to use. -
:type- specifies an HTTP content type. You can specify either a string or a symbol for a registered type withMime::Type.register, for example :json. If omitted, type will be inferred from the file extension specified in:filename. If no content type is registered for the extension, the default type ‘application/octet-stream’ will be used. -
:disposition- specifies whether the file will be shown inline or downloaded. Valid values are ‘inline’ and ‘attachment’ (default).
Example of generating a csv export:
send_stream(filename: "subscribers.csv") do |stream| stream.write "email_address,updated_at\n" @subscribers.find_each do |subscriber| stream.write "#{subscriber.email_address},#{subscriber.updated_at}\n" end end
Parameters
-
filenamekeyreq -
dispositionkey = "attachment" -
typekey = nil
Source
# File actionpack/lib/action_controller/metal/live.rb, line 346
def send_stream(filename:, disposition: "attachment", type: nil)
response.headers["Content-Type"] =
(type.is_a?(Symbol) ? Mime[type].to_s : type) ||
Mime::Type.lookup_by_extension(File.extname(filename).downcase.delete("."))&.to_s ||
"application/octet-stream"
response.headers["Content-Disposition"] =
ActionDispatch::Http::ContentDisposition.format(disposition: disposition, filename: filename)
yield response.stream
ensure
response.stream.close
end
Defined in actionpack/lib/action_controller/metal/live.rb line 346
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActionController::Live