2010-12-13 93 views
1

我目前將上傳到CMS的文件存儲在數據庫中。我的問題並沒有要求替代。我面臨的問題是從面向公衆的Web服務器提供文件時。CFContent的替代品?

理想情況下,我可以將文件緩存在文件系統中的Web服務器上,但是存在問題。系統允許使用相同的文件名上傳不同的文件,並且我不想使用UUID或MD5哈希來緩存文件,因爲我希望最終用戶能夠在保存對話框中擁有文件名。

我有cfcontent的問題是

  1. 每到一個文件請求加載該文件到內存中,我不介意做這個曾經創建緩存。
  2. cfcontent不允許http下載組塊,以便最終用戶停止下載文件並稍後嘗試恢復它。
  3. 對大文件的請求過多將會限制併發請求並強制普通頁面請求進入隊列。

P.S.這些文件存儲在數據庫中,因爲數據庫是CMS和公共站點之間唯一的通信形式。

回答

2

隨口說說,我建議使用主鍵從DB作爲目錄的名字,這樣你就可以保留原始名稱的文件,並將它們存儲在服務器上的唯一位置。

所以,假設有人上傳document.docx,併爲其分配了ID 3.您的URL將指向/content/3/document.docx或類似內容。

+0

我認爲這可能是一條路,您是否可以想到這樣做的缺點? – 2010-12-15 00:20:29

+0

主要的缺點是,你可能得到非常糟糕的目錄擴散。如果你認爲會有超過幾百個文件,你可以看看分組的方式,比如/ content /#client#/#docuID#/#document_name# – 2010-12-15 14:19:11

+0

那麼好的一面是每個站點都有自己的緩存文件夾,所以沒有兩個網站會混合文件。 – 2010-12-19 06:25:34

0

這是一個棘手的問題,就好像您在數據庫中有圖像一樣,您需要某種Servlet才能使它們在最終瀏覽器中可用。這意味着,除非您的數據庫有某種直接向瀏覽器公開圖像的方式,否則必須有一些內存中的處理。

您可以使用cfimage來顯示它,但我期望它具有與上面概述的完全相同的問題。

我有一個quick look on Google,但找不到任何明確滿足您需求的東西(這很奇怪,我原以爲會有東西),但是寫一個Servlet並將其部署在JRUN使用你想要的方式提供圖像,這取決於你的Java知識有多好。