Ich denke, ich habe ein bisschen ein Huhn und Ei Problem. Ich möchte den content_type einer über Paperclip hochgeladenen Datei festlegen. Das Problem ist, dass der Standardinhaltstyp nur auf der Erweiterung basiert, aber ich möchte ihn auf einem anderen Modul basieren.Overriding content_type für Rails Paperclip plugin
Ich scheine die content_type mit dem before_post_process in der Lage sein zu setzen
class Upload < ActiveRecord::Base
has_attached_file :upload
before_post_process :foo
def foo
logger.debug "Changing content_type"
#This works
self.upload.instance_write(:content_type,"foobar")
# This fails because the file does not actually exist yet
self.upload.instance_write(:content_type,file_type(self.upload.path)
end
# Returns the filetype based on file command (assume it works)
def file_type(path)
return `file -ib '#{path}'`.split(/;/)[0]
end
end
Aber ... Ich kann nicht den Inhaltstyp auf die Datei stützen, da Paperclip nicht die Datei bis after_create schreiben.
Und ich kann nicht die content_type zu setzen scheinen, nachdem sie die after_create Rückruf (auch wieder in der Steuerung)
So gespeichert oder mit wurde ich möchte wissen, ob ich irgendwie Zugriff auf die eigentliche Datei-Objekt bekommen (Angenommen, es gibt keine Prozessoren, die irgendetwas mit der Originaldatei tun, bevor sie gespeichert werden, damit ich den Befehl file_type ausführen kann.) Oder gibt es eine Möglichkeit, den content_type zu ändern, nachdem die Objekte erstellt wurden.
Anfahrt zum tempfile mit bekommen können war genau das, was ich brauchte. Ich habe es auch von 'before_post_process' in' before_save' geändert – Fotios