2009-11-26 4 views
2

Pour l'anecdote, je travaille sur du code hérité et j'essaie de brancher une nouvelle fonctionnalité sans tout casser. En ce moment j'ai un tas de fichiers sur mon serveur en tant que tel:Comment utiliser paperclip avec un fichier déjà sur mon serveur?

myapp/public/temp/myfile.doc 

La chose est que je veux créer un objet Docfile à partir de ces fichiers dans une action de contrôleur.

Voici la classe Docfile dégrossi:

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 une documentation bien si vous téléchargez à partir d'une forme, mais pas dans ma situation. 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 il ne fonctionne pas.

Tous les pointeurs seraient appréciés!

Edit:

Je l'ai fait:

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) 

Il ne fonctionne toujours pas

Répondre

3

je devais faire:

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 ne l'ai pas ouvrir le fichier comme « lire » cela ne fonctionnerait pas. Cela n'a pas beaucoup de sens pour moi mais ça marche maintenant!

1

Je ne suis pas une autorité sur les rails mais,

@docfile = DocFile.new :docs => temp_file 

devrait pas être

@docfile = DocFile.new :docs => temp_file_url 
+0

c'est vrai, ne sais pas si ça va avoir un impact ^^ Je suis en train de tester maintenant – marcgg

+0

J'ai essayé, je n'ai rien changé. – marcgg

0

Je pense que vous devrez résoudre ce problème avec une migration et pour vos fichiers existants, vous devrez remplir les colonnes que paperclip ajoute à votre modèle (xxx_file_name, xxx_content_type, xxx_file_size). Vous n'avez pas mentionné si Constants::DOCFILES_PATH est mappé à votre répertoire de document hérité, mais même si je pense que vous devrez créer un lien symbolique vers ces fichiers à la structure de répertoire que paperclip attend.

+0

Merci pour la réponse. Tout cela est fait. Paperclip fonctionne correctement lorsqu'il est utilisé avec une forme "normale". Cette situation est différente, donc c'est juste un peu de piratage ... une idée? – marcgg

1

Vous devez passer Paperclip un objet File:

temp_file_path = 'correct_rails_root/myapp/public/temp/myfile.doc' 
@docfile = DocFile.new :docs => File.open(temp_file_path) 
+0

Cela a du sens. J'ai essayé et ça ne marche pas. Voir mon edit – marcgg