我要用带有paperclip或carrierwave的rails将文件上传到rackspace(视频,音频和图像),我需要知道文件的类型,用image_tag显示在视图中,或者video_tag或audio_tag,rackspace告诉我那种的文件?或者我必须存储在我的数据库中?感谢
答案 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有类似的选项。两个选项:
类似于:File.extname(user.avatar)
,您必须根据自己的喜好进行解释。
carrierwave自述文件解释了如何让carrierwave首先计算它,然后您应该手动或使用carrierwave-meta将其存储到数据库中。然后user.avatar.content_type
类似于image/jpeg
,您可以轻松将其解释为特定的文件类型。