2011-02-09 89 views
7

我寫了一個使用Grails的小型Web應用程序。生成的war文件部署在Tomcat應用程序服務器上。Grails和Tomcat:在文件系統中存儲上傳文件的位置?

該應用程序具有附件的上傳功能。我選擇將上傳的文件保存到磁盤(而不是將數據存儲在數據庫中)。

起初我在webapp-dir中選擇了一個文件路徑來存儲這些文件,但是後來我意識到這個目錄會被每次部署一個新的war文件覆蓋。

是否有最佳實踐「在哪裏存儲在您的本地文件系統上載的文件」

感謝您的幫助。

+0

如果您閱讀Grails郵件列表,您會注意到我有*完全相同的問題*。希望得到一個好的答案。 – 2011-02-09 13:54:59

+1

如果你從郵件列表中得到一些有用的東西,你可以在這裏發佈一個解決方案嗎? – DiegoFrings 2011-02-09 15:13:59

回答

1

我會推薦使用環境變量來存儲位置,或者更好地使用環境變量來設置配置屬性文件的位置並在其中設置屬性。這樣,操作團隊就可以配置位置,操作團隊應該管理文件系統/配置問題。

+0

聲音中斷,但是:操作團隊可以將dir僅配置爲應用程序服務器可以處理的路徑。如果文件將存儲在可以說「/ tmp /」中,應用服務器將無法將此圖像發送到瀏覽器。那麼滿足這兩個要求的好位置在哪裏:應用程序服務器可以向瀏覽器發送文件並且在部署過程中dir不會被覆蓋? – DiegoFrings 2011-02-09 15:02:33

2

AlphaOne,我們做類似於你要求的東西,但是我們在Tomcat前面使用了Apache webserver。我們從配置文件中選擇完整路徑並寫入它。說「/ tmp /品牌」。然後,我們還從配置文件(例如「myapp/branding」)中獲取此位置的url路徑,並在我們的GSP中使用此路徑。然後,在Apache中,我們將應用程序對該URL的請求(「myapp/branding」)映射到繞過Tomcat的文件位置。

2

創建一個單獨的項目上傳並傳遞用戶名以創建用戶特定的文件夾。當用戶想要上傳文件時,從主項目提供此項目的鏈接。

0

我想你正在尋找一個最佳實踐解決方案。嗯,並不是真的,但有些地方你應該避免把它們放進去。我將假設一個UNIX環境。

例如:

  • 的$ CATALINA_HOME。只需保留應用程序文件夾,不要用上傳的文件污染它。
  • /tmp。你永遠不知道誰會清理它。

雖然我不確定這是一個鎖定的規格,但您可以看看:linux directory structure

我看它的方式,你有3種選擇:

  1. 如果Tomcat運行使用專用的用戶 - >用戶的主目錄。例如〜/ Fileuploads/appname
  2. 由於var可以被看作是一個增長的應用程序數據目錄。例如:/ var/Fileuploads/appname
  3. 將其留給系統管理員。看看這個:Externalizing Grails Configuration

祝你好運!

相關問題