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

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

Я пытался с помощью send_dataно это дает мне undefined method 'send_data'

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

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

4 ответа

Решение

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

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's gonna be legen -\n"
    sleep 0.5
    out << " (wait for it) \n"
    sleep 1
    out << "- dary!\n"
  end
end

Источник: http://www.sinatrarb.com/intro

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

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
Другие вопросы по тегам