Думаю, у меня проблемы с курицей и яйцом. Я хотел бы установить content_type файла, загруженного через Paperclip. Проблема в том, что тип содержимого по умолчанию основан только на расширении, но я бы хотел использовать его для другого модуля.
Мне кажется, что я могу установить тип содержимого с помощью 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
Но ... я не могу основать тип содержимого на файле, потому что Paperclip не записывает файл до after_create.
И я не могу установить content_type после того, как он был сохранен или с обратным вызовом after_create (даже обратно в контроллер)
Итак, я хотел бы знать, могу ли я каким-то образом получить доступ к реальному объекту файла (предположим, что процессоры ничего не делают с исходным файлом) до его сохранения, чтобы я мог выполнить команду file_type для этого. Или есть способ изменить content_type после того, как объекты были созданы.