send_file envoie juste un fichier vide
-
27-09-2019 - |
Question
Je cherche un moyen de télécharger un fichier xml. J'utilise:
file_path = 'folder/' + xml_name + '.xml'
send_file file_path, :type => "text/xml"
mais cela me télécharge toujours un fichier vide. Le fichier lui-même a 16 Ko de données en elle ...
Pourquoi?
Maechi
La solution 2
Problème sauvé, mais je ne sais pas pourquoi
File.open(file_path, 'r') do |f|
send_data f.read, :type => "text/xml", :filename => "10.xml"
end
send_data travaille ... mais pas send_file!
Autres conseils
probablement vous devez commenter
config.action_dispatch.x_sendfile_header = "X-Sendfile"
dans production.rb
voir http: // vijaydev. wordpress.com/2010/12/15/rails-3-and-apache-x-sendfile/ des explications
Comme Eugene dit dans sa réponse, dans un environnement de production Rails laisser Apache ou nginx envoyer le fichier réel pour vous avec x-sendfile, si vous n'utilisez ces que l'infrastructure pour rails vous devez commenter la ligne suggéré dans le
config / environnements / fichier production.rb.
# config.action_dispatch.x_sendfile_header = "X-Sendfile"
Vous devez activer l'utilisation sendfile dans ./config/environments/production.rb
:
config.action_dispatch.x_sendfile_header = "X-Sendfile"
Si cette ligne est absente (ou commentée), puis Rails correctement envoyer le fichier, mais pas par Apache.
Si vous obtenez des fichiers de 0 octet, assurez-vous que vous avez installé mod_xsendfile
, qui est disponible à partir de https: // tn123.org/mod_xsendfile
Télécharger le fichier source unique (mod_xsendfile.c
) et le compiler (apxs -cia mod_xsendfile.c
). Vous voulez probablement exécuter apxs
en tant que root afin qu'il configuré correctement tout.
Ensuite, vous allez vouloir définir les options de XSendFile
et XSendFilePath
dans vos fichiers de configuration Apache. Consultez l'aide à l'adresse ci-dessus pour plus d'informations.