2011/06/28

Plone BlobStorage and Image

下列是使用 Plone 4.0.7 實測 Blob 功能的記錄。

新增一個 Image,附的圖檔約 1.4MB,看到 var/blobstorage 裡出現一個 0x00/0x00/0x00/0x00/0x00/0x00/0x20/0x5b/0x038f4c3af3551d22.blob 檔案,大小 1486990,驗證圖檔放進 blobstorage 裡,值得注意的是,同時伴隨產生一個 0x00/0x00/0x00/0x00/0x00/0x00/0x20/0x66/0x038f4c3af6acde66.blob 檔案,大小 40615。

在 Plone 裡把上述圖檔刪除,原本 blobstorage 對應的檔案仍然存在,並未馬上被刪除,直到執行 pack 之後,blobstorage 裡面剩下 0x00/0x00/0x00/0x00/0x00/0x00/0x20 目錄,底下的檔案都被刪除。

接著,即使重複上述的圖檔新增動作,上傳同樣圖檔,blobstorage 會產生新的對應檔名,例如 0x00/0x00/0x00/0x00/0x00/0x00/0x20/0x6e/0x038f4c4d455447cc.blob (size 1486990) 和 0x00/0x00/0x00/0x00/0x00/0x00/0x20/0x75/0x038f4c4d482af9ee.blob (size 40615)。

新增一個 File,附的檔案指定上述的圖檔,blobstorage 則會產生 0x00/0x00/0x00/0x00/0x00/0x00/0x20/0x7d/0x038f4c7f2e73e400.blob (size 1486990),但是沒有產生大小為 40615 的伴隨檔案。

如果編輯舊的 File,上傳新的檔案,則會對應產生 0x00/0x00/0x00/0x00/0x00/0x00/0x20/0x88/0x038f4cd0ba71df00.blob (size 11080872) 新檔案,原本的 0x00/0x00/0x00/0x00/0x00/0x00/0x20/0x7d/0x038f4c7f2e73e400.blob (size 1486990) 仍然存在,直到執行 pack 之後,才會只剩 0x00/0x00/0x00/0x00/0x00/0x00/0x20/0x88/0x038f4cd0ba71df00.blob (size 11080872)。

另外,新增 News Item 時,預設有兩種方式來上傳圖檔。一種是從 Image 欄位上傳圖檔,這種方式並不會在 blobstorage 裡產生對應的檔案,相同目錄裡也看不到對應的 ATImage 檔案,暫不清楚跟 show_content_type 是否相關。另一種方式是從 RichWidget 欄位上傳圖檔,這種方式會在 News Item 相同的目錄裡,建立對應的 ATImage 檔案,同時也在 blobstorage 裡產生 0x00/0x00/0x00/0x00/0x00/0x00/0x20/0xd1/0x038f4cde1e238bee.blob (size 1486990) 和 0x00/0x00/0x00/0x00/0x00/0x00/0x20/0xd6/0x038f4cde20a1d711.blob (size 6285) 的對應檔案,效果等同先建立 ATImage 再於 RichWidget 裡指定連結。

額外一提的是,如果 RichWidget 欄位上傳的圖檔,目錄已存在相同檔名的檔案,則會自動更名為 copy_of_SomeImage.jpg 之類的識別碼。

使用 blobstorage 後,即使所有的 Image File 都清掉,在檔案系統裡還是會留下之前建立過的目錄:
var/blobstorage/
├── 0x00
│   └── 0x00
│   └── 0x00
│   └── 0x00
│   └── 0x00
│   └── 0x00
│   ├── 0x20
│   └── 0x21
└── tmp

No comments: