2011-05-21 32 views
16

Deseo enviar datos binarios desde una aplicación Sinatra para que el usuario pueda descargarlo como un archivo.¿Cómo puedo enviar datos binarios de Sinatra?

He intentado utilizar send_data pero me da una undefined method 'send_data'

¿Cómo podría lograr esto?

Podría escribir los datos en un archivo y luego usar send_file, pero preferiría evitar hacerlo.

Respuesta

27

sólo puede devolver datos binarios:

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

lo hice así:

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 
7

La versión actual de Sinatra tiene una forma de transmitir datos:

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 

Fuente: http://www.sinatrarb.com/intro#Streaming%20Responses

+0

Para más calidad de streaming: http://www.sinatrarb.com/contrib/streaming.html –

+1

1 de HIMYM ref – nurettin

0

he usado algo como esto:

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 
Cuestiones relacionadas