Grails:从应用程序外部提供静态内容

时间:2012-10-19 20:01:39

标签: image grails upload static

我正在开发CMS,我希望用户能够上传自己的图片,CSS文件等。为了安全起见,我不希望将上传的文件存储在应用程序结构/部署的WAR中。

从非Grails位置的控制器提供grails内容的最简单方法是什么?

3 个答案:

答案 0 :(得分:1)

通过适当的工具提供静态内容是正确的方法,所有的Web服务器都提供了实现这一目标的可能性。如果您想在Grails应用程序中实现对此内容的管理,请在Config.groovy中配置静态内容的目标,以及所有内容。

不要通过控制器实现从文件系统加载内容,你正在重新发明轮子;-)而且Web服务器的性能要高得多; - )

答案 1 :(得分:1)

经过大量研究和质疑,我决定将静态资源(如图像)打包到数据库中。这样做的好处是:

  1. 您无需在应用程序中打包图像(重新部署可能导致您丢失所有图像)
  2. 您无需将图像存储在服务器上的其他位置,远离应用程序。
  3. 您无需使用Amazon S3等第三方服务。
  4. 编写一个简单的控制器来提供数据库中的文件相对简单。
  5. 缺点是:

    1. 您无法访问/操作文件系统上的文件。
    2. 数据库增长,可能变得非常慢。
    3. 每当有人请求图片时,您都需要进行数据库调用。
    4. 我决定采用这个解决方案,即使有这些缺点。这就是我处理它们的方式:

      1. 这不是问题,因为它是100%在线系统。
      2. 我的图片很小,而且图片不多,所以这不是问题。
      3. 利用高效且简单的缓存机制。见下文:
      4. 我正在使用智能浏览器缓存,使用etags(documentation)并使用EHCache(documentation)来缓存图像服务器端。上传新图像后,将更改电子标签,并清除缓存,强制浏览器下载新的副本。

        到目前为止,MySQL数据库的性能损失并不明显,性能也很快。

答案 2 :(得分:1)

我会添加一个指向远程文件系统文件夹的上下文别名,如cdavis226在其帖子中所解释的那样:

http://grails.1312388.n4.nabble.com/How-to-configure-context-xml-aliases-for-Tomcat-7-td4632149.html

如果您使用的是Grails默认的Tomcat服务器,则此解决方案可用。