Подтвердить что ты не робот

Как я могу отправить двоичные данные из Sinatra?

Я хочу отправить двоичные данные из приложения Sinatra, чтобы пользователь мог загрузить его как файл.

Я попытался использовать send_data, но он дает мне undefined method 'send_data'

Как я мог достичь этого?

Я могу записать данные в файл, а затем использовать send_file, но я бы предпочел не делать этого.

4b9b3361

Ответ 1

вы можете просто вернуть двоичные данные:

get '/binary' do
  content_type 'application/octet-stream'
  "\x01\x02\x03"
end

Ответ 2

Я сделал это вот так:

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

Ответ 3

Текущая версия 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

Ответ 4

Я использовал что-то вроде этого:

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