【问题标题】:How to configure Grails to avoid deletion of uploaded images when redeploy in a Tomcat server如何配置 Grails 以避免在 Tomcat 服务器中重新部署时删除上传的图像
【发布时间】:2013-07-31 16:51:40
【问题描述】:

我一直是reading about the best place to save images uploaded by users。就我而言,我认为将这些图像存储在文件系统中会更好。我想将它们存储在同一台服务器中,以便其他管理员轻松维护。

是否可以在应用程序上下文中设置上传文件夹并配置 Grails 以便在重新部署新战争时不删除该文件夹?

如果没有,我想知道下一个代码(@yecid 获得的here)是否会起作用,因为我认为它会在应用程序上下文中上传图像:

//for development environment
def root = System.properties['base.dir']?.toString()
if(!root){
    //for production environment in war deplements
    def tmpRoot = ApplicationHolder.application.mainContext.getResource('WEB-INF').getFile().toString()
    root = tmpRoot.substring(0, tmpRoot.indexOf(File.separator + 'temp' + File.separator))
}
if(!root){
    throw new Exception('Not found a valid path')
}
return root + File.separator

【问题讨论】:

  • Grails 不会删除该文件夹。无论您使用什么服务器。
  • 你是对的,但我想知道是否可以配置 Grails 来告诉 Tomcat 在重新部署时不要删除该文件夹。

标签: tomcat grails storage


【解决方案1】:

在代码中,我看到您正在将上传的文件保存到您的 WEB-INF 文件夹中。虽然您可以这样做,但当您重新启动服务器/重新部署应用程序时,您的 web-app 文件夹的内容将被替换,因此上传的文件也将被删除。 这就是 Tomcat 的工作原理。

我认为更好的方法是将上传的文件保存到不在 Web 容器内的文件夹中(Tomcat)文件夹。这样,当您:

1) 重新部署您的网络应用程序

2) 不管什么原因重启Tomcat

我的团队过去的做法是在当前用户的主文件夹中创建一个自定义文件夹。这样我们就不用担心保存文件的权限了。

【讨论】:

  • 好的。现在一切都清楚了。谢谢你。我不知道Tomcat是否会有一个主文件夹所以我的想法是将图像保存在应用程序所在的父文件夹中:String path = servletContext.getRealPath("/"); String parentStr = new File(path).getParentFile().getParent();
  • 我的意思是,如果 Web 应用程序位于 D:\somefolder\myWeb\web-app`, parentStr` 将是 D:\somefolder` . I want to save the images in D:\somefolder\myWeb-images`
  • 嗨 chelder,我不是指 Tomcat 中的任何文件夹,我指的是您当前用户的主文件夹(很可能是使用其权限启动 tomcat 的用户)
  • 我理解你的方法,但在某些方面我不建议这样做。当然,您可以将图像保存到您想要的任何位置,只要您对该目录具有写入权限即可。但是,如果您在 Web 服务器上工作,有时您将没有整个系统的管理权限。更安全的选择是将文件保存在当前用户的主文件夹(Windows 中的个人文件夹)下,因为您始终有权访问您的主文件夹,因此您始终拥有写入权限。
猜你喜欢
  • 1970-01-01
  • 2015-02-08
  • 2015-05-02
  • 2013-09-13
  • 2018-11-29
  • 1970-01-01
  • 2013-01-31
  • 2014-02-27
  • 2020-05-06
相关资源
最近更新 更多