因此,在阅读官方文档后,我将以这种方式使用Active Storage变体
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">
问题是当我查看S3存储设备时,我注意到我拥有原始文件(例如,大小为22kb)和包含2kb文件的变体文件(已调整大小的文件)。
我在文档中知道说:
..”“当浏览器点击变体URL时,Active Storage将懒惰地 将原始Blob转换为指定的格式并重定向到 它的新服务位置。”
但是有什么方法可以防止Active Storage生成其他变体文件吗?就像制作变体一样,就是原始的。因此,我只有2kb,而不是S3中的24kb重复记录。
非常感谢!
编辑:
我设法解决了一些问题,如果有人遇到这个问题:
<%= image_tag user.avatar.variant(resize: "100x100") %>
创建一个帮助器,包括以下方法:
def resize_avatar2
avatar_f = avatar.last
if avatar_f.nil?
return
end
resized_image = MiniMagick::Image.read(avatar_f.download)
resized_image = resize_with_crop(resized_image, 300, 300)
v_filename = avatar_f.filename
v_content_type = avatar_f.content_type
avatar.all.each { |imagen| imagen.purge }
avatar.attach(
io: File.open(resized_image.path),
filename: v_filename,
content_type: v_content_type)
end
答案 0 :(得分:1)
如果您想用变体替换原始图片,我认为最好的方法是在上传图片之前调整图片大小。
例如使用DA_A
查找临时文件的路径,在该文件上运行ffmpeg(有宝石),然后上传结果。
或者,您可以在作业中的图像上传后对其进行处理:
params[:user][:avatar]
)的模型中,添加一个User
after_create :resize_image
的{{1}}方法resize_image
方法)中,您将:
ImagesJob.resize(self).perform_later
(Rails的生成的URL,而不是S3的URL)resize(user)
(需要url = user.avatar.variant(resize: "100x100").url
)image = open(url).read
(require 'open-uri'
表)。ActiveStorage::Blob
上传为新图像active_storage_blobs
(未经测试,但可能非常接近)