2010-04-18 18 views
11

Estoy enviando un archivo de ms-word utilizando rieles. es decir, cuando hago clic en un enlace, se envía un archivo de doc desde la carpeta tmp (en el proyecto).Usando send_file en rieles

El código que estoy usando es

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

Está funcionando, pero se está enviando un archivo vacío. El contenido falta en el archivo. ¿Alguna sugerencia?

+1

+1. Asegúrese de no enviar un archivo vacío. – fig

+0

No estoy enviando un archivo vacío – sgi

Respuesta

14

No hay send_file: opción de transmisión, es: secuencia. Estás pasando malos tipos de parámetros. : buffer_size debería ser un número, no una cadena. : la secuencia debe ser booleana, no cadena.

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

sólo necesita el parámetro de nombre de archivo (si desea enviar el archivo con otro nombre que el original). Otras opciones que está utilizando son predeterminadas (excepto: escriba).

¿Puedes probar esto?

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

intente enviar con: la disposición => 'inline'

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

comentario la línea siguiente en config/environments/production.rb

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

Para nginx es 'X-Accel-Redirect'. – m33lky

+0

Ah, gracias. Usamos 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 
Cuestiones relacionadas