Как я могу отправить двоичные данные из Синатры? - PullRequest
16 голосов
/ 21 мая 2011

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

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

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

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

Ответы [ 4 ]

28 голосов
/ 24 мая 2011

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

get '/binary' do
  content_type 'application/octet-stream'
  "\x01\x02\x03"
end
7 голосов
/ 08 февраля 2013

В текущей версии 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#Streaming%20Responses

7 голосов
/ 22 мая 2011

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

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
0 голосов
/ 13 февраля 2016

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...