Question Utiliser send_file dans les rails


J'envoie un fichier ms-word en utilisant des rails. Lorsque je clique sur un lien, un fichier doc du dossier tmp (dans le projet) est envoyé.

Le code que j'utilise est

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

Cela fonctionne, mais il envoie un fichier vide. Le contenu est manquant dans le fichier. Aucune suggestion?


11
2018-04-18 16:39


origine


Réponses:


Il n'y a pas envoyer le fichier : option de streaming, c'est: stream. Vous passez de mauvais types de paramètres. : buffer_size doit être un nombre et non une chaîne. : stream doit être booléen, pas string.

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

Vous n'avez besoin que du paramètre filename (si vous voulez envoyer un fichier avec un autre nom que l'original). Les autres options que vous utilisez sont par défaut (sauf: type).

Pouvez-vous essayer ça?

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

14
2018-04-18 17:01



commenter la ligne suivante dans config/environments/production.rb

config.action_dispatch.x_sendfile_header = "X-Sendfile"

3
2018-06-14 15:56



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

0
2017-11-20 07:57



Essayez d'envoyer avec: disposition => 'inline'

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

0
2018-04-18 20:28