Ruby on rails 在使用Cloudinary和Active Storage时,如何设置要上载到特定文件夹的文件?
我理解当使用下面的语法直接上传到Cloudinary并将文件夹名称作为参数传递时,这种情况是如何发生的Ruby on rails 在使用Cloudinary和Active Storage时,如何设置要上载到特定文件夹的文件?,ruby-on-rails,http-headers,jobs,cloudinary,rails-activestorage,Ruby On Rails,Http Headers,Jobs,Cloudinary,Rails Activestorage,我理解当使用下面的语法直接上传到Cloudinary并将文件夹名称作为参数传递时,这种情况是如何发生的 Cloudinary::Uploader.upload("sample.jpg", :use_filename => true, :folder => "folder1/folder2") 但是,我使用的是ActiveStorage,当我以上述方式上传照片时,它不会附加到我的Post模型,也不会以任何方式与我的应用程序关联 我正在使用以下代
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文档,试图找到一种方法来实现这一点,但是,我似乎无法理解这一点
我已经看到,设置自定义文件夹标题可能是实现此功能的一种方法,但我仍然无法确定如何为在下面的作业中发生的上述代码设置自定义标题
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
需要“tmpdir”
需要“fileutils”
需要“打开uri”
类ResizeImagesJob
上面的工作是等待帖子创建完成,然后调整大小并将照片重新粘贴到帖子中,然后删除原件。我采用这种方法是为了避免上传后直接在Cloudinary上调整帖子大小时出现的完整性错误
我要做的是将调整大小的照片存储在不同的文件夹中。原因是我使用的是直接上传
,用户可以在不创建帖子的情况下上传照片。因此,导致我存储未使用的照片。这将提供一种识别和处理此类映像的简便方法。默认情况下,Cloudinary活动存储服务将上载到Cloudinary帐户的根目录。如果要将文件上载到不同的基本文件夹,则可以在storage.yml
文件中进行配置。为此,您需要添加文件夹
选项,并将其设置为您希望Cloudinary服务将资源上载到的文件夹-
cloudinary_gallery:
service: Cloudinary
folder: my_gallery_images
如果您要查找的不是基本文件夹,而是每次上载时动态更改上载文件的文件夹,那么简而言之,这是不受支持的。Cloudinary活动存储服务的实现与其他存储提供商类似,如Azure存储、Google云存储或Amazon S3。作为一种存储服务,其主要功能是在集成服务上存储文件,但Active Storage无法支持许多自定义上载流,例如每次上载时动态更改存储路径(文件夹)。Cloudinary本身支持此功能,但由于标准活动存储服务的集成方式受到限制,这意味着目前活动存储不支持此功能
但是,从事Rails/Active Storage工作的开发人员在即将发布的版本中有一个计划中的更新,以支持为同一服务定义多个Active Storage适配器。这将允许您在storage.yml
文件中配置多个Cloudinary配置,然后可以根据附件配置这些配置。有一个请求被合并以支持此-
使用上述更改,我们可以这样做-
在storage.yml中
cloudinary_profiles:
service: Cloudinary
folder: profiles
cloudinary_images:
service: Cloudinary
folder: images
然后您可以这样做(不同的附件可以引用不同的适配器)-
class用户
如果您需要一个附件来动态上载到不同的文件夹(或应用不同的上载参数/配置),则通常情况下,由于Active Storage服务基于其标准实现的限制,Active Storage不适用于此用例。您可以在不使用活动存储的情况下使用Cloudinary,根据您的使用情况进行更细粒度的控制。默认情况下,Cloudinary活动存储服务会上载到Cloudinary帐户的根目录。如果要将文件上载到不同的基本文件夹,则可以在storage.yml
文件中进行配置。为此,您需要添加文件夹
选项,并将其设置为您希望Cloudinary服务将资源上载到的文件夹-
cloudinary_gallery:
service: Cloudinary
folder: my_gallery_images
如果您要查找的不是基本文件夹,而是每次上载时动态更改上载文件的文件夹,那么简而言之,这是不受支持的。Cloudinary活动存储服务的实现与其他存储提供商类似,如Azure存储、Google云存储或Amazon S3。作为一种存储服务,其主要功能是在集成服务上存储文件,但Active Storage无法支持许多自定义上载流,例如每次上载时动态更改存储路径(文件夹)。Cloudinary本身支持此功能,但由于标准活动存储服务的集成方式受到限制,这意味着目前活动存储不支持此功能
但是,从事Rails/Active Storage工作的开发人员在即将发布的版本中有一个计划中的更新,以支持为同一服务定义多个Active Storage适配器。这将允许您在storage.yml
文件中配置多个Cloudinary配置,然后可以根据附件配置这些配置。有一个请求被合并以支持此-
使用上述更改,我们可以执行以下操作