默認情況下,Rails Active Storage 似乎通過關聯的active_storage_blob key.
默認行為的規則如下所示。在<Rails.root>/storage/目錄中:
- 取 the 的前兩個字符
key并創建一個目錄- 在該目錄中,取下兩個字符
key并創建另一個目錄- 將檔案存盤在那里,檔案名是整個
key
- 將檔案存盤在那里,檔案名是整個
- 在該目錄中,取下兩個字符
例如:其中key一個特定檔案的關聯active_storage_blob是:2HadGpe3G4r5ygdgdfh5534346,它看起來像下面這樣:

我不想要這種嵌套行為。我想將檔案平面存盤在存盤目錄中。所以我只是想讓它看起來像這樣:
.
我怎樣才能做到這一點?谷歌搜索和通讀Active Storage Rails 指南并沒有找到解決方案。
也只是出于好奇:為什么這是默認行為?
uj5u.com熱心網友回復:
在周圍挖代碼的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。也許知道的人可以評論一下。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/342923.html
