在rails中查找上载文件的内容类型

时间:2013-03-05 06:14:05

标签: ruby-on-rails-3 paperclip bytearray mime-types stringio

我正在使用ruby on rails。我正在尝试做文件附件(图像/音频/视频)。

所以我有一个像

这样的常用方法
byteArray = StringIO.new(File.open("path").read)

是否可以找到byteArray的内容类型来检查上传的文件是否是ruby中的image / audio / video / pdf。

1 个答案:

答案 0 :(得分:6)

我看到这被标记为paperclip,所以我会告诉你我们是如何用回形针做的:

class Attachment < ActiveRecord::Base

        has_attached_file :attachment,
                styles:          lambda { |a| a.instance.is_image? ? {:small => "x200>", :medium => "x300>", :large => "x400>"}  : {:thumb => { :geometry => "100x100#", :format => 'jpg', :time => 10}, :medium => { :geometry => "300x300#", :format => 'jpg', :time => 10}}},
                :processors => lambda { |a| a.is_video? ? [ :ffmpeg ] : [ :thumbnail ] }

        def is_video?
                attachment.instance.attachment_content_type =~ %r(video)
        end

        def is_image?
                attachment.instance.attachment_content_type =~ %r(image)
        end

end

如果您设法将文件放入Paperclip,它基本上已将其切换为content_type。这意味着,如果您使用lambda来确定附件content_type是否包含imagevideo

如果你给我一些关于你想要达到的目标的更多信息,我可以给你一些重构的代码来专门帮助解决你的问题:)