如何识别rackspace中的文件类型?

时间:2013-09-25 14:52:35

标签: ruby-on-rails paperclip carrierwave rackspace-cloud rackspace

我要用带有paperclip或carrierwave的rails将文件上传到rackspace(视频,音频和图像),我需要知道文件的类型,用image_tag显示在视图中,或者video_tag或audio_tag,rackspace告诉我那种的文件?或者我必须存储在我的数据库中?感谢

2 个答案:

答案 0 :(得分:2)

您可以使用位于'ruby-cloudfiles'库中的'content_type'函数来查询/设置文件类型。

见这里: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

答案 1 :(得分:1)

即使机架空间会告诉您文件类型,也不需要它,因为从服务器到他们的服务器往返运行需要很长时间。

下面我的代码示例假设载波,但我确定paperclip有类似的选项。两个选项:

  1. 解释文件扩展名
  2. 类似于:File.extname(user.avatar),您必须根据自己的喜好进行解释。

    1. 记录&解释哑剧类型。
    2. carrierwave自述文件解释了如何让carrierwave首先计算它,然后您应该手动或使用carrierwave-meta将其存储到数据库中。然后user.avatar.content_type类似于image/jpeg,您可以轻松将其解释为特定的文件类型。