Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在使用Cloudinary和Active Storage时,如何设置要上载到特定文件夹的文件?_Ruby On Rails_Http Headers_Jobs_Cloudinary_Rails Activestorage - Fatal编程技术网

Ruby on rails 在使用Cloudinary和Active Storage时,如何设置要上载到特定文件夹的文件?

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并将文件夹名称作为参数传递时,这种情况是如何发生的

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配置,然后可以根据附件配置这些配置。有一个请求被合并以支持此-

使用上述更改,我们可以执行以下操作