Ruby on Rails - Active Storage - 如何只接受pdf和doc?

Mag*_*Sz. 9 ruby-on-rails ruby-on-rails-5 rails-activestorage

是否可以添加验证以仅使用Active Storage接受.pdf和.doc文件?

mic*_*sek 15

目前,您必须编写自己的验证程序,查看附件的MIME类型:

class Item
  has_one_attached :document

  validate :correct_document_mime_type

  private

  def correct_document_mime_type
    if document.attached? && !document.content_type.in?(%w(application/msword application/pdf))
      document.purge # delete the uploaded file
      errors.add(:document, 'Must be a PDF or a DOC file')
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

此外,还有一些有用的快捷方法image?,audio?,video?text?对多种MIME类型检查.

  • Activestorage应该在rails 6中进行正确的验证。与此同时,我发现我还需要包括document.purge以及errors.add,否则该blob将成为孤立的。 (2认同)

Con*_*lon 7

有一个gem可以为主动存储提供验证

gem 'activestorage-validator'
Run Code Online (Sandbox Code Playgroud)

https://github.com/aki77/activestorage-validator

  validates :avatar, presence: true, blob: { content_type: :image }
  validates :photos, presence: true, blob: { content_type: ['image/png', 'image/jpg', 'image/jpeg'], size_range: 1..5.megabytes }
Run Code Online (Sandbox Code Playgroud)


mem*_*oht 6

由于 ActiveStorage 还没有验证,我在我的表单中发现了以下帮助。

<div class="field">
  <%= f.label :deliverable %>
  <%= f.file_field :deliverable, direct_upload: true, 
    accept: 'application/pdf, 
    application/zip,application/vnd.openxmlformats-officedocument.wordprocessingml.document' %>
 </div>
Run Code Online (Sandbox Code Playgroud)

  • 后端应该总是有一个验证。任何使用都可以很容易地禁用它:) (5认同)