簡體   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