Ответ 1
вы можете просто вернуть двоичные данные:
get '/binary' do
content_type 'application/octet-stream'
"\x01\x02\x03"
end
Я хочу отправить двоичные данные из приложения Sinatra, чтобы пользователь мог загрузить его как файл.
Я попытался использовать send_data
, но он дает мне undefined method 'send_data'
Как я мог достичь этого?
Я могу записать данные в файл, а затем использовать send_file
, но я бы предпочел не делать этого.
вы можете просто вернуть двоичные данные:
get '/binary' do
content_type 'application/octet-stream'
"\x01\x02\x03"
end
Я сделал это вот так:
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
Текущая версия Sinatra позволяет передавать данные:
get '/' do
stream do |out|
out << "It gonna be legen -\n"
sleep 0.5
out << " (wait for it) \n"
sleep 1
out << "- dary!\n"
end
end
Источник: http://www.sinatrarb.com/intro#Streaming%20Responses
Я использовал что-то вроде этого:
require 'sinatra'
set :port, 8888
set :bind, '0.0.0.0'
filename = 'my_firmware_update.bin'
get '/' do
content_type 'application/octet-stream'
File.read(filename)
end