使用 ULID 命名資料夾路徑,管理圖片與尺寸會很漂亮。
無論是圖片儲存位置或資料庫,都不需要保留原始檔名,也不必使用冗長的 UUID 或隨機字串。
ULID 長度適中,且可依時間排序,結合尺寸與 namespace 的概念後,整體結構會更清楚。
副檔名如 jpg、png 不必另外建立資料庫欄位,可直接保留在檔案路徑中。資料庫只需儲存相對路徑,例如:
{NAMESPACE}/{ULID}/original.jpg
圖片上傳時,先建立或使用對應的 namespace 資料夾,再以 ULID 建立子資料夾。
資料夾內第一張原圖命名為 original.副檔名,其餘則放置六種尺寸版本並保留副檔名。
這樣的圖片目錄結構會簡潔、好讀,也容易管理。以下是一些範例:
.
├── banners
│ ├── 01M1E345QY1SXXTWGDYAA37J8A
│ │ ├── lg.jpg
│ │ ├── md.jpg
│ │ ├── original.jpg
│ │ ├── sm.jpg
│ │ ├── xl.jpg
│ │ ├── xs.jpg
│ │ └── xxl.jpg
│ ├── 01M1E34CN5WZDP80VA13WXK821
│ │ ├── lg.png
│ │ ├── md.png
│ │ ├── original.png
│ │ ├── sm.png
│ │ ├── xl.png
│ │ ├── xs.png
│ │ └── xxl.png
│ └── 01M1JGG1Y5QR49VB7A1ANJ6362
│ ├── lg.jpg
│ ├── md.jpg
│ ├── original.jpg
│ ├── sm.jpg
│ ├── xl.jpg
│ ├── xs.jpg
│ └── xxl.jpg
├── concerns
├── 01M0A59PMFAJHJFKWMAE2EKHW4
│ ├── lg.jpg
│ ├── md.jpg
│ ├── original.jpg
│ ├── sm.jpg
│ ├── xl.jpg
│ ├── xs.jpg
│ └── xxl.jpg
├── 01M0A695VKRDY5HS3FD002P5M2
│ ├── lg.jpg
│ ├── md.jpg
│ ├── original.jpg
│ ├── sm.jpg
│ ├── xl.jpg
│ ├── xs.jpg
│ └── xxl.jpg
└── 01M1E69QR343GW184JN8D438QB
├── lg.jpg
├── md.jpg
├── original.jpg
├── sm.jpg
├── xl.jpg
├── xs.jpg
└── xxl.jpg
注意刪除圖片的時候,要從相對路徑找出對應 ULID 資料夾,整個刪掉。