ruby-on-rails - 检测文件类型并调整图像大小
问题描述
我有模型附件 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
解决方案
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?
推荐阅读
- angular - 无法通过 HttpClient 发出请求,也无法在 NativeScript 中获取
- angular - 单选按钮清除表单重置角度 6 上的默认值
- bash - Shell 脚本从用户读取多个输入
- c++ - 如何使用 C++ 在“应用程序和服务日志”部分创建事件日志
- angular - 如何在 Angular 7 应用程序中使用 ngb-carousel?
- visual-studio - Visual Studio -> 包装每个参数
- javascript - React - 流和条件渲染
- java - webapp1的html5视频使用webapp2的源码,如何避免webapp2暴露给外网浏览器
- xcode - 我能以某种方式获取 NSErrorDomain: CloudPhotoLibraryErrorDomain 的可用错误代码常量列表吗?
- file-upload - 使用 actix-web-Framework 在 Rust 中的网络服务器上上传文件时使用原始文件名保存文件