2009-07-29 9 views
3

Gibt es eine bessere Möglichkeit, eine Zeichenkette als Anhang über Paperlip zu speichern, indem man eine tmp-Datei erstellt, die Zeichenkette darin einfügt, sie wieder öffnet und als Anlage speichert?Paperclip save attachment

So:

def save_string data 
    tmp_file = "/some/path" 
    File.open(tmp_file,'w') do |f| 
     f.write(data) 
    end 

    File.open(tmp_file,'r') do |f| 
     ceneo_xml = f 
     save! 
    end 
    end 
+1

Warum zum Teufel willst du das tun? – Lichtamberg

Antwort

0

Paperclip speichert Dateien neben Ihren Modellen - das ist, was sie zu tun geschrieben wurde, so glaube ich, die kurze Antwort ist „Nein“. Wenn Sie in der Paperclip-Quelle in attachment.rb suchen, sehen Sie eine Methode namens def assign uploaded_file. Wenn Sie sich die Implementierung dieser Methode ansehen, können Sie sehen, dass das hochgeladene Dateiobjekt bestimmte Methoden definiert.

Sie könnten Ihre eigene Klasse erstellen, die die gleiche Schnittstelle wie Paperclip erwartet, aber um ehrlich zu sein, Ihre Lösung zum Speichern einer Datei und Zuordnung zu Paperclip ist wahrscheinlich der einfachste Ansatz.

4

Es gibt eigentlich einen besseren Weg - Sie können es in StringIO umwickeln, was Paperclip verbessert und Sie werden eine Pseudo-hochgeladene Datei in kürzester Zeit bekommen. Sie können es anpassen, indem Sie Instanzmethoden definieren oder direkt eine Unterklasse von StringIO erstellen.

class InvoiceAttachment < StringIO 
def initialize(invoice, content) 
    @invoice = invoice 
    super(content) 
end 

def original_filename 
    from = @invoice.from 
    to = @invoice.to 
    date = @invoice.created_at.strftime('%B-%Y').downcase 
    "invoice_#{date}_from_#{from}_to_#{to}.pdf" 
end 

def content_type 
    'application/pdf' 
end 
end 

Genießen Sie!

+0

Wie funktioniert das mit ActionMailer? – TheExit

+0

Ich habe nach so etwas gesucht. Aber wie funktioniert das mit Büroklammer? Wie nehme ich einen E-Mail-Anhang von ActionMailer, und dann senden Sie den Anhang (mit StringIO) an Büroklammer? – TheExit