Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using send_file in rails

I'm sending a ms-word file using rails. i.e when I click on a link, a doc file from tmp folder (in project) is sent.

The code I'm using is

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

It's working, but it's sending an empty file. Content is missing in the file. Any suggestions?

like image 790
sgi Avatar asked Apr 18 '10 16:04

sgi


3 Answers

There is no send_file :streaming option, it is :stream. You're passing bad parameters types. :buffer_size should be number, not a string. :stream should be boolean, not string.

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

You need only filename parameter (if you want to send file with another name than the original). Other options you are using are default (except :type).

Can you try this ?

@filename ="#{RAILS_ROOT}/tmp/test/test.doc"
send_file(@filename, :filename => "test.doc")
like image 111
retro Avatar answered Oct 12 '22 06:10

retro


comment out the following line in config/environments/production.rb

config.action_dispatch.x_sendfile_header = "X-Sendfile"
like image 44
seanbehan Avatar answered Oct 12 '22 04:10

seanbehan


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
like image 31
Mukesh Avatar answered Oct 12 '22 06:10

Mukesh