在grails控制器中获取应用程序路径

Get Application path in grails controller

我目前正在为 grails 项目使用 Intellij idea。

我要上传,用户头像到项目目录。 例如E:\MyProject\userUploads

目前我正在尝试使用以下代码获取路径

def filePath = request.getSession().getServletContext().getRealPath("/")

但是当我打印文件路径时,我得到:

C:\Users\Rahul.Mahadik\AppData\Local\Temp\tomcat-docbase.2236924879274963579.8080\

我也试过"servletContext.getRealPath("/")"这也是为了获取我当前目录的路径,但得到的路径与上面相同

谢谢

您应该了解在 Grails 中构建和 运行 网络应用程序的流程。

当您启动 run-app 命令时,Grails 会编译您的代码并创建 war 文件 - 这是一个 web 应用程序存档。 为了 运行 这个 war 文件你需要一些网络服务器。 Grails 有其嵌入式 Tomcat 服务器,因此它获取 war 文件并将其部署到 Tomcat.
Tomcat 有自己的文件夹,其中部署了 Web 应用程序存档。因此,您的应用程序的路径是 Tomcat 服务器正在 运行 安装您的应用程序的某个文件夹的路径。这就是为什么你看到

C:\Users\Rahul.Mahadik\AppData\Local\Temp\tomcat-docbase.2236924879274963579.8080\

显然,Tomcat 不知道您的项目位于何处。所以当你的应用程序是 运行ning.

时,你无法获取此路径

将文件存储路径设置为可配置是一种常见的做法。 您可以在本主题中了解如何使用外部配置文件:

通过在 application.yml

中添加以下内容解决了我的问题
server.contextPath: /

如果我 运行 应用 grails -Dapp.context=/ run-app