首页 > 解决方案 > 检测文件类型并调整图像大小

问题描述

我有模型附件 whitch supprted pdf 和图像。如何检测它的图像是否然后才调整它的大小?当它是回形针时,一切都很简单。但现在 ?;)

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'}, :medium => { :geometry => "300x300#", :format => 'jpg'}}},

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

end

如何使用主动存储制作类似上面的东西?我尝试这样:

class Attachment < ApplicationRecord
  has_one_attached :file
  validates :file, presence: true

def file_url
if ???? (is image?)
rails_blob_url(file.variant(resize: '1920x1920').processed)
else
rails_blob_url(file)
  end
end

标签: ruby-on-railsruby-on-rails-5rails-activestorage

解决方案


ActiveStorage 内置了流行内容类型的帮助程序,例如:图像、视频、音频等。对于图像是image?

if file.image?
  rails_representation_url(file.variant(resize: '1920x1920').processed)
else
  rails_blob_url(file)
end

API 文档:https ://api.rubyonrails.org/classes/ActiveStorage/Blob.html#method-i-image-3F

audio?, image?, text?, video?


推荐阅读