检测文件类型并调整图像大小

问题描述 投票:0回答:2

我有模型附件,支持pdfs和图像。如何检测其图像是否只调整大小?当它是回形针时,一切都很简单。但现在 ? ;)

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-rails ruby-on-rails-5 rails-activestorage
2个回答
0
投票

我试过这个..它是什么“signed_id”?


NoMethodError (undefined method `signed_id' for #<ActiveStorage::Variant:0x00007fb67a4325f0>):

activestorage (5.2.0) config/routes.rb:7:in `block (2 levels) in <main>'
actionpack (5.2.0) lib/action_dispatch/routing/route_set.rb:641:in `instance_exec'
actionpack (5.2.0) lib/action_dispatch/routing/route_set.rb:641:in `eval_block'
actionpack (5.2.0) lib/action_dispatch/routing/route_set.rb:630:in `call'
actionpack (5.2.0) lib/action_dispatch/routing/route_set.rb:164:in `block (2 levels) in add_url_helper'
app/models/attachment.rb:27:in `file_url'
app/serializers/api/v1/attachment_serializer.rb:7:in `file_url'

0
投票

ActiveStorage已经为流行的内容类型构建了帮助程序,如:图像,视频,音频等。对于图像是image?

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

Api docs:https://api.rubyonrails.org/classes/ActiveStorage/Blob.html#method-i-image-3F

audio?, image?, text?, video?

© www.soinside.com 2019 - 2024. All rights reserved.