I want to send binary data from a Sinatra application so that the user can download it as a file.
I tried using send_data
but it gives me an undefined method 'send_data'
How could I achieve this?
I could write the data to a file and then use send_file
but I would rather avoid doing this.
you can just return binary data:
get '/binary' do
content_type 'application/octet-stream'
"\x01\x02\x03"
end
I did it like this:
get '/download/:id' do
project = JSON.parse(Redis.new.hget('active_projects', params[:id]))
response.headers['content_type'] = "application/octet-stream"
attachment(project.name+'.tga')
response.write(project.image)
end
The current version of Sinatra has a way to stream data:
get '/' do
stream do |out|
out << "It's gonna be legen -\n"
sleep 0.5
out << " (wait for it) \n"
sleep 1
out << "- dary!\n"
end
end
Source: http://www.sinatrarb.com/intro#Streaming%20Responses
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With