【问题标题】:ActiveStorage download allActiveStorage 下载所有
【发布时间】:2018-10-15 11:36:08
【问题描述】:

我最近使用 ActiveStorage,我想知道是否有一种方法可以一次下载所有附件。例如我有一个帖子,里面有很多照片,用户可以下载所有附加到这个帖子的照片。

【问题讨论】:

    标签: ruby-on-rails-5 rails-activestorage


    【解决方案1】:

    您可以通过递归 + ActiveStorage::Blob#open 来实现这一点

    https://api.rubyonrails.org/v6.0.2.1/classes/ActiveStorage/Blob.html#method-i-open

    示例代码:

    def download_all(attachments, files = [], &block)
      if attachments.empty?
        yield files
        return
      end
    
      attachments.first.open do |file|
        files << file
        method(__method__)[attachments[1, attachments.length - 1], files, &block]
      end
    end
    

    用法:

    download_all(record.attachments) do |files|
      pp files
    end
    

    请注意,文件将在块终止后自动删除,您必须处理块内的所有文件。

    【讨论】:

      【解决方案2】:

      将所有附加的照片下载到 ZIP 文件中的帖子中,如下所示:

      def download_zip
        send_zip Post.photos
      end
      
      

      你必须使用以下 gem

      gem 'active_storage-send_zip'
      

      不要忘记添加到您的控制器:

      include ActiveStorage::SendZip
      

      参考: https://github.com/madeindjs/active_storage-send_zip

      【讨论】:

        猜你喜欢
        • 2019-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-16
        • 1970-01-01
        • 2019-04-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多