在rails中使用send_file

时间:2010-04-18 16:39:09

标签: ruby-on-rails

我正在使用rails发送一个ms-word文件。 即当我点击链接时,会发送来自tmp文件夹(项目中)的doc文件。

我正在使用的代码是

@filename ="#{RAILS_ROOT}/tmp/test/test.doc"
send_file(@filename ,
            :filename      =>  "test",
            :type          =>  'application/msword',
            :disposition  =>  'attachment',
            :streaming    =>  'true',
        :buffer_size  =>  '4096')

它正在运行,但它正在发送一个空文件。文件中缺少内容。有什么建议吗?

4 个答案:

答案 0 :(得分:14)

没有send_file:流媒体选项,它是:stream。你传递了错误的参数类型。 :buffer_size应该是数字,而不是字符串。 :stream应该是boolean,而不是string。

:stream => true,
:buffer_size => 4096,

您只需要文件名参数(如果您要发送另一个名称而不是原始文件)。您使用的其他选项是默认值(除了:类型)。

你能试试吗?

@filename ="#{RAILS_ROOT}/tmp/test/test.doc"
send_file(@filename, :filename => "test.doc")

答案 1 :(得分:3)

注释掉config/environments/production.rb

中的以下行
config.action_dispatch.x_sendfile_header = "X-Sendfile"

答案 2 :(得分:0)

尝试发送:disposition => '内联'

send_file path, :type => 'application/msword', :disposition => 'inline'

答案 3 :(得分:0)

In your view =>
<%= link_to "click here to download", signed_feeds_pdf_path(:feed_image_path => feed_image.feedimage.path), target: '_self' %>
In your controller =>
  def pdf
    file_name = params[:feed_image_path].split('/').last
    @filename ="#{Rails.root}/public/uploads/feed_image/feedimage/#{file_name}"
    send_file(@filename ,
      :type => 'application/pdf/docx/html/htm/doc',
      :disposition => 'attachment')           
  end