2011-02-09 77 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

祝你好运!

相关问题