【发布时间】:2016-02-13 20:59:27
【问题描述】:
我想从 Sinatra 应用程序发送二进制数据,以便用户可以将其作为文件下载。
我尝试使用send_data,但它给了我一个undefined method 'send_data'
我怎样才能做到这一点?
我可以将数据写入文件,然后使用send_file,但我宁愿避免这样做。
【问题讨论】:
标签: sinatra
我想从 Sinatra 应用程序发送二进制数据,以便用户可以将其作为文件下载。
我尝试使用send_data,但它给了我一个undefined method 'send_data'
我怎样才能做到这一点?
我可以将数据写入文件,然后使用send_file,但我宁愿避免这样做。
【问题讨论】:
标签: sinatra
你可以只返回二进制数据:
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
【讨论】:
我用过这样的东西:
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
【讨论】: