如何在Rails 3中执行同步send_file

时间:2011-12-14 05:05:52

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我知道rails3移动到基于异步send_file的机架中间件。对于我的用例,我需要执行同步阻塞sendfile。你如何在Rails3中做到这一点?

class SomeControlle
  def send_it
    Foo.prepare_file do |f|
      send_file f  # I want this to be blocking
    end
  end
end

class Foo
  def self.prepare_file(&block)
    create tmp file
    yield file
    ensure
      unlink tmp file
  end
end

更新:

使用Amadan提供的链接,我现在能够以阻止的方式将文件发送到浏览器。我的最后一个障碍是弄清楚为什么文件大小在我的prod env中显示为-1字节,但在本地显示正确的文件大小。

我现在拥有的:

DocProcessor.new().prepare_for_download(@file) do |f|
  # send_file f
  response.headers['Content-Type'] = @file.content_type
  response.headers['Content-Disposition'] = "attachment; size=\"#{@file.file_size}\"; filename=\"#{@file.original_filename}\""
  render :text => open(f, 'rb').read
end

知道为什么下载中的文件大小会显示-1个字节?

0 个答案:

没有答案