【发布时间】:2021-01-27 13:28:14
【问题描述】:
我了解使用以下语法直接上传到 Cloudinary 并将文件夹名称作为参数传递时会发生这种情况。
Cloudinary::Uploader.upload("sample.jpg", :use_filename => true, :folder => "folder1/folder2")
但是,我使用的是 ActiveStorage,当我以上述方式上传照片时,它不会附加到我的 Post 模型或以任何方式与我的应用关联。
我正在使用以下代码附加图片
post.send(:images).attach io: StringIO.new(new_data), filename: blob.filename.to_s,
content_type: 'image'
它不接受指定文件夹的参数。我已尽力阅读 ActiveStorage 和 Cloudinary 文档,试图找到一种方法来完成这项工作,但是我似乎无法弄清楚。
我已经看到设置自定义文件夹标题可能是使其工作的一种方法,但再次无法弄清楚如何为发生在下面的job 中的上述代码设置自定义标题。
require 'tmpdir'
require 'fileutils'
require 'open-uri'
class ResizeImagesJob < ApplicationJob
queue_as :default
def perform(post)
post.images.each do |image|
blob = image.blob
blob.open do |temp_file|
path = temp_file.path
pipeline = ImageProcessing::MiniMagick.source(path)
.resize_to_limit(1200, 1200)
.call(destination: path)
new_data = File.binread(path)
post.send(:images).attach io: StringIO.new(new_data), filename: blob.filename.to_s,
content_type: 'image'
end
image.purge_later
end
end
end
上述工作所做的是等到创建帖子后,然后调整照片大小并将照片重新附加到帖子上,然后删除原件。我采用这种方法来避免在上传后直接在 Cloudinary 上调整帖子大小时发生的完整性错误。
我想要做的是将调整大小的照片存储在不同的文件夹中。原因是我使用的是direct_upload,用户可以上传照片而无需创建帖子。从而导致我存储未使用的照片。这将提供一种识别和处理此类图像的简单方法。
【问题讨论】:
标签: ruby-on-rails http-headers jobs cloudinary rails-activestorage