2014-03-06 88 views
0

我需要加載密鑰文件才能在我的服務器上創建一個GoogleCredential實例。 我使用從Uri轉換爲Web應用程序上下文中的文件路徑

url = servletContext.getResource(RESOURCES_FOLDER + "/" + filePath); 

的URL資源這是我WEB-INF/resources目錄返回:

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

的問題是,GoogleCredential.setServiceAccountPrivateKeyFromP12File需要一個文件對象作爲參數。

當使用

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

f爲正在創建但在錯誤的道路創造了File

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

如何將URL轉換爲Web服務器上下文中的文件?或者是有創建 GoogleCredential實例

回答

1

嘗試這種更簡單的方法 - 使用this.getClass()而不是ServletContext中:

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

UPDATE:

其實,我看看你的您用來獲取資源的URL。任何時候你使用的是.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");

你永遠不想以資源網址爲/。這意味着你正在從你的硬盤根目錄(絕對路徑)看。你想要一個相對路徑的資源。

+0

當不用「/」前綴時,路徑在包內部意思是: url = this.getClass()。getResource(「」); 返回$ /webapps//WEB-INF/classes/com/core/repository/fixture/ url = this.getClass()。getResource(「/」); 返回$ /webapps/devstage-1.0/WEB-INF/classes/ 後者更有意義。謝謝 – special0ne

相關問題