代码之家  ›  专栏  ›  技术社区  ›  branchgabriel

grails base.dir系统属性

  •  5
  • branchgabriel  · 技术社区  · 15 年前

    我有一个简单的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 回复  |  直到 8 年前
        1
  •  4
  •   branchgabriel    15 年前

    谢谢J,

    我找到了最好的动态解决方案。通常,我不喜欢在任何软件中编写绝对路径。属性文件或编号。

    下面是如何完成的:

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

    grailsattributes在任何控制器中都可用。

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

    例如,在我的开发系统中,它将输出到“c:\workspacefolder\projectfolder\web app”,并将相对目录指定为末尾

    在我上面的例子中是这样的 C:\workspacefolder\projectfolder\web app\files文件

    我用的是6.1,它在容器中工作,没有问题。 您必须对其进行字符串处理,否则它将尝试返回对象。

    穆加夫加

        2
  •  4
  •   Wanderson Santos    14 年前

    有一个确定的方法…

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

    脱离控制器(例如引导程序)?只是注射…

    def grailsApplication
    

    最好的问候!

        3
  •  3
  •   j pimmel    15 年前

    当Grails在dev模式下运行时,它依次为其gant脚本和应用程序(包括basedir)提供了一整套环境属性。

    看看 格雷斯蝙蝠 格莱斯 编写脚本,您将找到以下行:

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

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

    当你采取战争和部署时,你不再使用这些脚本,因此你需要用另一种方法来解决问题;你可以

    1. 为应用服务器的启动脚本指定自己的属性,例如:-dbase.dir=/some/dir..然而
        4
  •  2
  •   Steve Wall    12 年前

    另一种选择:

    def basepath=buildsettingsholder.settings.basedir