2010-04-18 11 views
11

Wysyłam plik ms-word za pomocą szyn. tj. Po kliknięciu łącza wysyłany jest plik dokumentu z folderu tmp (w projekcie).Używanie send_file in rails

Kod używam jest

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

To działa, ale to wysyłając pustego pliku. W pliku brakuje treści. Jakieś sugestie?

+1

+1. Upewnij się, że nie wysyłasz pustego pliku. – fig

+0

Nie wysyłam pustego pliku – sgi

Odpowiedz

14

Nie ma opcji przesyłania strumieniowego send_file: strumień. Przekazujesz złe typy parametrów. : buffer_size powinno być liczbą, a nie łańcuchem. : strumień powinien być boolowski, a nie ciąg.

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

Potrzebujesz tylko parametru nazwy pliku (jeśli chcesz wysłać plik o innej nazwie niż oryginał). Inne używane opcje są domyślne (z wyjątkiem: type).

Czy możesz tego spróbować?

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

Próba wysłania z: usposobienia => 'inline'

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

komentarz poniższy wiersz config/environments/production.rb

config.action_dispatch.x_sendfile_header = "X-Sendfile" 
+0

Dla nginx jest to 'X-Accel-Redirect'. – m33lky

+0

Ah, dzięki. Używamy nginx. – panzi

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