Я собираюсь загружать файлы в rackspace (видео, аудио и изображения) в рельсы с помощью скрепки или несущей, мне нужно знать тип файла, чтобы показать в представлении с помощью image_tag или video_tag или audio_tag, rackspace скажите мне, как файл? или мне нужно сохранить в моей базе данных? спасибоКак я могу определить тип файла в rackspace?
ответ
Даже если rackspace сообщит вам тип файла, вы его не хотите, так как потребуется так много времени, чтобы запускать туда-обратно с вашего сервера.
Мои приведенные ниже примеры кода предполагают несущую волну, но я уверен, что у paperclip есть аналогичные варианты. Два варианта:
- интерпретируют расширение файла
Что-то вроде: File.extname(user.avatar)
, которые вы затем должны интерпретировать, как вам нравится.
- Запись & интерпретировать тип мим.
carrierwave ридй объясняет, как получить carrierwave вычислить его, в первую очередь, а затем, вероятно, следует хранить его в базу данных вручную или с помощью carrierwave-meta. Тогда user.avatar.content_type
будет что-то вроде image/jpeg
, которое вы можете легко интерпретировать как определенный тип файла.
Вы можете запросить/установить тип файла, используя функцию content_type, расположенную в библиотеке ruby-cloudfiles.
Смотрите здесь: https://github.com/rackerlabs/ruby-cloudfiles/blob/master/lib/cloudfiles/storage_object.rb#L80-L82
Что-то, как это должно работать для создания объекта:
container = conn.create_container('new_container')
obj = container.create_object('new_obj.txt')
obj.load_from_filename('./obj.txt')
obj.content_type = 'text/plain'
И для получения объекта:
obj = container.object('new_obj.txt')
puts obj.content_type # text/plain