如何在Tomcat上使用Grails在我的网络应用程序(上传相册)中创建一个新文件夹?

时间:2010-04-22 16:47:32

标签: java tomcat grails

我想创建一个相册。 但我想在服务器上整理相册,所以我想创建新的文件夹:

/ MyApp的 / MyApp的/相册 / MyApp的/专辑/ 1 / MyApp的/专辑/ 2 ...

如何使用Grails在tomcat上执行此操作?它在tomcat / bin中创建所有新文件夹,而不是在tomcat / webapps / myapp /

2 个答案:

答案 0 :(得分:6)

当我必须做类似的事情时,我在Config.groovy中定义了一个根路径,如

environments {
    production {
rootPath="/home/user/reports"
    }
    development {
rootPath="c:\\reports"
    }
    test {
rootPath="c:\\reports"
    }

然后创建如下目录。

import org.codehaus.groovy.grails.commons.ConfigurationHolder as Conf
tempFile=new File(Conf.config.rootPath+"dirName")
tempFile.mkdir()

答案 1 :(得分:2)

我不做Grails,但由于它运行在Servlet API之上,你可能会发现这个答案(正确方向的转向)也很有用。

首先,获取ServletContext的句柄。通常,您会使用GenericServlet - 继承的getServletContext()方法。然后使用ServletContext#getRealPath()方法将相对Web路径转换为绝对本地磁盘文件系统路径(因为这是唯一java.io.File可靠地了解)。

String absolutePath = getServletContext().getRealPath("albums/1");
File file = new File (absolutePath);
// ...

如果您在java.io.File内容中使用相对路径,那么它将变为相对于当前工作目录,这取决于您启动服务器的方式以及您经历过的Tomcat/bin确实可能是{{1}}

也就是说,这种方法存在另一个主要问题:如果您在爆炸式网络应用程序中创建文件夹,那么每当您重新部署Web应用程序甚至重新启动服务器时,它们都会迷路!而是在webapp的上下文之外,在磁盘文件系统的其他位置的固定路径中创建文件夹。或者,如果您想要更好的可移植性(但是元数据信息较差),那么请考虑将其存储在数据库中。