Comment utiliser un trombone avec un fichier déjà sur mon serveur?
-
05-07-2019 - |
Question
Pour mémoire, je travaille sur du code hérité et j'essaie de brancher une nouvelle fonctionnalité sans tout casser. En ce moment, j'ai plusieurs fichiers sur mon serveur en tant que tels:
myapp/public/temp/myfile.doc
Le fait est que je veux créer un objet Docfile à partir de ces fichiers dans une action du contrôleur.
Voici la classe Docfile découpée:
class DocFile < ActiveRecord::Base
has_attached_file :docs,
:path => "#{Constants::DOCFILES_PATH}:basename.:extension",
:url => "http://#{Constants::SITE_URL}/docs/:basename.:extension"
end
Paperclip a de la documentation intéressante si vous téléchargez à partir d'un formulaire, mais pas dans mon cas.
Alors, comment puis-je "simuler" le fait que je télécharge un fichier?
Jusqu'à présent, j'ai essayé ceci:
temp_file_url = "correct_rails_root/myapp/public/temp/myfile.doc"
@docfile = DocFile.new :docs => temp_file
Mais ça ne marche pas.
Tous les indicateurs seraient appréciés!
Modifier:
J'ai fait ceci:
temp_file_url = Constants::TEMPORARY_UPLOAD_PATH + "/" + params[:temp_file_upload][:doc]
temp_file = File.new(temp_file_url, "w+")
@docfile = DocFile.new :docs => File.open(temp_file_url)
Cela ne fonctionne toujours pas
La solution
Je devais faire ceci:
temp_file_name = #the filename
temp_file_path = Constants::TEMPORARY_UPLOAD_PATH + "/" + temp_file_name
temp_file = File.new(temp_file_path, "r")
@docfile = DocFile.new :docs => temp_file
Apparemment, si je n'ai pas ouvert le fichier en tant que "read" ça ne marcherait pas. Cela a très peu de sens pour moi mais cela fonctionne maintenant!
Autres conseils
Je ne suis pas une autorité sur Rails, mais
@docfile = DocFile.new :docs => temp_file
ça ne devrait pas être
@docfile = DocFile.new :docs => temp_file_url
Vous devez transmettre Paperclip
à un objet Fichier
:
temp_file_path = 'correct_rails_root/myapp/public/temp/myfile.doc'
@docfile = DocFile.new :docs => File.open(temp_file_path)
Je pense que vous devrez résoudre ce problème par une migration et pour vos fichiers existants, vous devrez renseigner les colonnes ajoutées par le trombone à votre modèle ( nom_fichier_xxx> / code>,
type_du_contenu_du_xxx, xxx_file_size
). Vous n'avez pas mentionné si Constants :: DOCFILES_PATH
est mappé sur votre répertoire de document hérité, mais même dans ce cas, je pense que vous devrez symlink vers ces fichiers vers la structure de répertoires attendue par le trombone.