【问题标题】:Finding the content type of the uploaded file in rails在rails中查找上传文件的内容类型
【发布时间】:2013-03-05 06:14:05
【问题描述】:

我正在研究 ruby​​ on rails。我正在尝试做一个文件附件(图像/音频/视频)。

所以我有一个通用的方法,比如

byteArray = StringIO.new(File.open("path").read)

是否可以找到byteArray的内容类型来检查上传的文件是否是ruby中的图像/音频/视频/pdf。

【问题讨论】:

  • 你是用回形针上传文件吗?
  • @Ramiz Raja ya 一旦我设置了附件的内容类型,我曾经通过回形针保存它。目前我有 3 种单独的方法来保存图像、音频和视频中的一种。所以我试图概括它,以便找到 byteArray 的内容类型并设置内容类型并将其保存在 Paperclip
  • 你可以得到上传文件的content typepaperclip为上传文件生成列<model_name>_content_type
  • 您是否希望按文件类型限制上传?

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


【解决方案1】:

我看到它被标记为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是包含image还是video

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

【讨论】:

  • 你知道为什么样式 lambda 接收附件文件对象,但处理器接收附件模型对象吗?
  • 不,抱歉-该代码现在也可能已过时:(
猜你喜欢
  • 1970-01-01
  • 2016-04-02
  • 2011-01-19
  • 2013-01-04
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
  • 2018-09-22
  • 2013-09-11
相关资源
最近更新 更多