Я использую Rails + ActiveStorage для загрузки файлов изображений и хотел бы сохранить ширину и высоту в базе данных после загрузки. Тем не менее, у меня возникают проблемы с поиском каких-либо примеров этого где-либо.
Это то, что я собрал в различных документах API, но в итоге получаю эту ошибку: private method 'open' called for #<String:0x00007f9480610118>
. Замена blob
на image.file
заставляет рельсы регистрировать «Пропуск анализа изображения, поскольку ImageMagick не поддерживает файл» (https://github.com/rails/rails/blob/master/activestorage/lib/active_storage/analyzer/image_analyzer.rb#L39).
Код:
class Image < ApplicationRecord
after_commit { |image| set_dimensions image }
has_one_attached :file
def set_dimensions(image)
if (image.file.attached?)
blob = image.file.download
# error: private method `open' called for #<String:0x00007f9480610118>
meta = ActiveStorage::Analyzer::ImageAnalyzer.new(blob).metadata
end
end
end
Этот подход также проблематичен c, поскольку after_commit
также вызывается при уничтожении.
TLDR: Существует ли "правильный" способ получения метаданных изображения сразу после загрузки