grails base.dir系统属性

时间:2009-02-20 18:22:57

标签: configuration grails

我有一个简单的grails文件上传应用程序。

我正在使用transferTo将文件保存到文件系统。

要在我的控制器中获取基本路径,我正在使用

def basePath = System.properties['base.dir'] // HERE IS HOW I GET IT

        println "Getting new file"
        println "copying file to "+basePath+"/files"
        def f = request.getFile('file')
        def okcontents = ['application/zip','application/x-zip-compressed']
        if (! okcontents.contains(f.getContentType())) {
            flash.message = "File must be of a valid zip archive"
            render(view:'create', model:[zone:create])
            return;
        }
              if(!f.empty) {
                  f.transferTo( new File(basePath+"/files/"+zoneInstance.title+".zip") )
              }
              else 
              {
                  flash.message = 'file cannot be empty'
                      redirect(action:'upload')
              }
        println "Done getting new file"

由于某些原因,当部署到我的WAS 6.1服务器时,它总是为空。

为什么在运行dev但在WAS服务器上没有prod时它可以工作?我应该以不同的方式访问这些信息吗?

4 个答案:

答案 0 :(得分:4)

谢谢j,

我找到了最好的动态解决方案。作为一项规则,我从不喜欢将绝对路径编码到任何软件中。属性文件或否。

所以这是如何完成的:

def basePath = grailsAttributes.getApplicationContext().getResource("/files/").getFile().toString() 

grailsAttributes可在任何控制器中使用。

getResource(一些相对目录)将在web-app文件夹中查找任何内容。

因此,例如在我的开发系统中,它将切换到“C:\ WORKSPACEFOLDER \ PROJECTFOLDER \ web-app \,相对dir合并到最后

在上面的例子中是这样的 C:\ WORKSPACEFOLDER \ PROJECTFOLDER \ web应用\文件

我在WAS 6.1中尝试过,它在容器中工作没有问题。 你必须toString它或它将尝试返回对象。

mugafuga

答案 1 :(得分:4)

有一种明确的方式......

grailsApplication.parentContext.getResource("dir/or/file").file.toString()

控制器外(例如bootstrap)?刚注射..

def grailsApplication

祝你好运!

答案 2 :(得分:3)

Grails,当它以开发模式运行时,依次为其Gant脚本和应用程序提供了大量环境属性,包括basedir。

查看 grails.bat grails.sh 脚本,您会发现这些行:

Unix: -Dbase.dir="." \
Windows: set JAVA_OPTS=%JAVA_OPTS% -Dbase.dir="."

当这些脚本以开发模式启动您的环境时,您可以免费获得这些脚本。

当您使用WAR并部署时,您不再使用这些脚本,因此您需要以另一种方式解决问题;你可以

  1. 自己为应用服务器的启动脚本指定属性,例如:-Dbase.dir =。/ some / dir ..但是

答案 3 :(得分:2)

另一种选择:

def basePath = BuildSettingsHolder.settings.baseDir