Frage

Für das Protokoll, ich bin auf Legacy-Code und ich versuche, eine neue Funktion zu verstopfen, ohne alles zu brechen. Im Moment habe ich eine Reihe von Dateien auf meinem Server als solche:

 myapp/public/temp/myfile.doc

Die Sache ist, dass ich ein DocFile Objekt aus diesen Dateien in einer Controller-Aktion erstellt werden soll.

Hier ist die abgespeckte DocFile Klasse:

class DocFile < ActiveRecord::Base
  has_attached_file :docs,
    :path => "#{Constants::DOCFILES_PATH}:basename.:extension",
    :url => "http://#{Constants::SITE_URL}/docs/:basename.:extension"
end

Büroklammer hat einige schöne Dokumentation, wenn Sie aus einem Formular hochladen, aber nicht in meiner Situation.

Wie kann ich „simulieren“ die Tatsache, dass ich eine Datei bin das Hochladen?

Bisher habe ich versucht, dies:

temp_file_url = "correct_rails_root/myapp/public/temp/myfile.doc"
@docfile = DocFile.new :docs => temp_file

Aber es funktioniert nicht.

würde Alle Zeiger geschätzt werden!

Edit:

Ich tue dies:

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)

Es ist immer noch nicht funktioniert

War es hilfreich?

Lösung

Ich hatte dies zu tun:

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

Offenbar, wenn ich nicht die Datei als „lesen“ öffnen war es nicht funktionieren würde. Es macht sehr wenig Sinn für mich, aber es funktioniert jetzt!

Andere Tipps

Ich bin nicht eine Autorität auf Schienen, sondern

@docfile = DocFile.new :docs => temp_file

sollte es nicht sein

@docfile = DocFile.new :docs => temp_file_url  

Sie sollten ein Paperclip Objekt übergeben File:

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

Ich glaube, Sie müssen dies mit einer Migration adressieren und für Ihre vorhandenen Dateien müssen Sie die Spalten füllen, die Büroklammer zu Ihrem Modell ergänzt (xxx_file_name, xxx_content_type, xxx_file_size). Du hast nicht erwähnt, wenn Constants::DOCFILES_PATH auf Ihren alten Dokumentenverzeichnis zugeordnet ist, aber auch so denke ich, werden Sie auf diese Dateien in die Verzeichnisstruktur Symlink müssen die Büroklammer erwartet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top