Ruby on Rails:使用Flash上​​传器使用Paperclip限制文件类型

时间:2011-02-19 13:15:34

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

我有一个非常基本的Paperclip上传模型,它通过has_many附加到用户模型,并使用Uploadify进行实际上传。 Flash发送内容类型为“application / octet-stream”的所有文件,因此使用validates_attachment_content_type拒绝所有文件。

在我的创建操作中,我能够从原始文件名中获取mime-type,但只有在保存之后才能获得:

def coerce(params)
  h = Hash.new 
  h[:upload] = Hash.new 
  h[:upload][:attachment].content_type = MIME::Types.type_for(h[:upload][:attachment].original_filename).to_s
  ...
end

def create
  diff_params = coerce(params)
  @upload = Upload.new(diff_params[:upload])
  ...
end

白名单文件类型的最佳方式是什么?

我正在考虑使用before_validation方法,但我不确定它是如何工作的。任何想法都会受到欢迎。

1 个答案:

答案 0 :(得分:1)

我安装了mimetype-fu并且卡在了

before_validation :find_mimetype

def find_mimetype
    attachment = self.attachment.to_file.path
    file = File.open(attachment)
    mime = File.mime_type?(file)
    self.attachment.instance_write(:content_type, mime)
end