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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top