繁体   English   中英

不要在 rails 活动存储中嵌套文件

[英]Do not nest files in rails active storage

默认情况下,Rails Active Storage 似乎通过关联的active_storage_blob key嵌套您上传的文件。

默认行为的规则如下所示。 <Rails.root>/storage/目录中:

  • key的前两个字符并创建一个目录
    • 在该目录中,取key的下两个字符并创建另一个目录
      • 将文件存储在那里,文件名是整个key

例如:特定文件的关联active_storage_blobkey是: 2HadGpe3G4r5ygdgdfh5534346 ,它看起来像下面这样:

Rails Active Storage 嵌套默认行为

我不想要这种嵌套行为。 我想将文件平面存储在存储目录中。 所以我只是想让它看起来像这样:

所需的主动存储行为 .

我怎样才能做到这一点? 谷歌搜索和通读Active Storage Rails 指南并没有找到解决方案。

也只是出于好奇:为什么这是默认行为?

在 ActiveStorage DiskService 的代码中挖掘,我找到了生成文件夹结构的代码。 所有都方便地包含在一个函数中

def folder_for(key)
  [ key[0..1], key[2..3] ].join("/")
end

这可以通过一个简单的补丁轻松消除两个字母的子文件夹结构:

module ActiveStorage
  class Service::DiskService < Service
    private
      def folder_for(key)
        ""
      end
  end
end

最好对这个补丁做一些测试,但据我所知它应该可以正常工作。

仅通过查看 DiskService 代码我无法确定第二个问题的答案。 这个文件夹结构没有任何线索,所以原因可能在别处。 它可能完全出于美观目的而完成,以避免在大型服务器上出现巨大的单个文件夹 blob。 也许知道的人可以评论一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM