【问题标题】:How can I send binary data from Sinatra?如何从 Sinatra 发送二进制数据?
【发布时间】:2016-02-13 20:59:27
【问题描述】:

我想从 Sinatra 应用程序发送二进制数据,以便用户可以将其作为文件下载。

我尝试使用send_data,但它给了我一个undefined method 'send_data'

我怎样才能做到这一点?

我可以将数据写入文件,然后使用send_file,但我宁愿避免这样做。

【问题讨论】:

    标签: sinatra


    【解决方案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'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

        【讨论】:

          【解决方案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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-10-24
            • 2011-12-04
            • 2016-03-07
            • 1970-01-01
            • 2011-12-13
            • 2019-07-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多