Sanırım biraz tavuk ve yumurta problemim var. Paperclip aracılığıyla yüklenen bir dosyanın content_type değerini ayarlamak istiyorum. Sorun şu ki, varsayılan içerik_türü sadece uzantıya dayanıyor, ancak bunu başka bir modüle dayandırmak istiyorum.Rails Paperclip eklentisi için içerik_türü geçersiz kılma
Ben 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
ile CONTENT_TYPE içerik ayarlamak mümkün görünmektedir Ama Paperclip after_create kadar dosyayı yazmaz çünkü ... Ben dosyada içerik türünü temel olamaz.
Ve (denetleyici bile arka) kaydedilmiş veya after_create geri arama ile edildikten sonra ben nasılsa gerçek dosya nesnesine erişim sağlayabilmesi halinde
yüzden bilmek istiyorum CONTENT_TYPE içerik ayarlamak gibi olamaz (kaydedilmeden önce orijinal dosyaya herhangi bir işlem yapmaz) varsa, bunun üzerine file_type komutunu çalıştırabilirim. Veya nesneler oluşturulduktan sonra content_type değiştirmenin bir yolu var.
kullanarak
Tempfile
alabilirsinizpath
özelliğine sahiptir. Ayrıca 'before_post_process' ile' before_save' arasında değiştirdim. – Fotios