在Web应用程序上下文中从Uri转换为文件路径

时间:2014-03-06 19:57:10

标签: java spring google-drive-api tomcat7

我需要加载密钥文件以在我的服务器上创建GoogleCredential实例。 我使用

获取了WEB-INF/resources目录中的资源的URL
url = servletContext.getResource(RESOURCES_FOLDER + "/" + filePath);

返回:

"jndi:/localhost/<MY_APP>/WEB-INF/resources/<MY_FILE>"

问题是GoogleCredential.setServiceAccountPrivateKeyFromP12File需要File对象作为参数。

使用

创建File
f = new File(url.getFile());

f正在创建,但路径错误。

f.getAbsolutePath() = D:\localhost\<MY_APP>\WEB-INF\resources\secrets.p12

如何在Web服务器上下文中将URL转换为File?或者有一种更简单的方法来创建 GoogleCredential实例

1 个答案:

答案 0 :(得分:1)

试试这个 - 使用this.getClass()而不是servletContext:

new java.io.File(this.getClass().getResource(RESOURCES_FOLDER + "/" + filePath).toURI());

更新:

实际上,我会查看您用于获取资源的网址。只要您使用.getResource,默认网址就会指向/src/main/resources目录。您传递到.getResources方法的网址应该是该点的任何文件夹结构。

例如,如果我的文件夹结构是:

   -src
      -main
        -resources
           -googlecredentials.properties

您需要传递的所有内容是:this.getClass().getResource("googlecredentials.properties");

如果我的文件夹结构是:

   -src
      -main
        -resources
           -google
              -googlecredentials.properties

我需要传递:this.getClass().getResource("google/googlecredentials.properties");

您永远不希望在资源网址前加/作为前缀。那意味着你要从硬盘的根目录(绝对路径)看。您需要资源的相对路径。