Penso di avere un po 'di problemi con uova e galline. Vorrei impostare content_type di un file caricato tramite Paperclip. Il problema è che il content_type predefinito è basato solo sull'estensione, ma mi piacerebbe basarlo su un altro modulo.Overriding content_type for Rails Plug-in Paperclip
Mi sembra di essere in grado di impostare la content_type con l'before_post_process
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
Ma ... io non può basare il tipo di contenuto sul file perché Paperclip non scrive il file fino after_create.
E io non riesco a impostare il content_type dopo che è stato salvato o con la richiamata after_create (anche indietro nel controllore)
quindi vorrei sapere se posso in qualche modo ottenere l'accesso all'oggetto file effettivo (supponiamo che non ci siano processori che stanno facendo qualcosa per il file originale) prima che sia salvato, in modo che possa eseguire il comando file_type su quello. O c'è un modo per modificare il content_type dopo che gli oggetti sono stati creati.
Arrivare al tempfile era esattamente quello che mi serviva. Ho anche cambiato da 'before_post_process' a' before_save' – Fotios