2014-10-20 38 views
1

我們使用Commons VFS API在不同服務器之間進行文件傳輸。該代碼完美適用於Linux服務器。Commons VFS:連接到使用Open SSH運行的Windows Server時的SFTP URL語法

但是我們有Windows服務器的URL語法問題。我們嘗試以下URL類型的列表,但是所有的人都造成了無效的絕對URI錯誤

SFTP://用戶名@ IP:C:\ TEMP

SFTP://用戶名@ IP/C:\ TEMP

SFTP://用戶名@ IP \ C:\ TEMP

STFP://用戶名@ IP /溫度 - 導致在無法determin e文件類型

所有這些錯誤在我們的頭腦中開始了另一個疑問,即VFS是否支持通過SFTP連接到Windows文件系統。

讚賞這方面的任何幫助。

回答

1

您需要使用正斜槓來將主機與路徑和不同的路徑元素分開。

指定dos驅動器的方式取決於您使用的SFTP服務器上的一個位。其中一些使用cygwin路徑,如/ cygdrive/c/temp,其他使用/ C/Temp,一些使用基路徑下方的基目錄。

我不知道是否有一個實際上允許與冒號的驅動器盤符,但無論如何,如果你不在乎,你需要躲避:(冒號)與%3a(十六進制代碼):

sftp://[email protected]/C%3a/temp 

如果您不想在URL中引用所有可能的字符,則可以使用如this answer中建議的URI類:(但您需要確保使用/(斜槓)開始path字符串以使其成爲絕對的)

URI uri1 = new URI("sftp", "user:[email protected]", "127.0.0.1", -1, "/C:/temp", null, null); 
fsm.resolveFile(uri1.toString(), opts); 

,或者當您不想要轉換的本地路徑,你可以使用:

String path = new File("C:\\temp").toURI().getPath(); 
URI uri2 = new URI("sftp", "user:[email protected]", "127.0.0.1", -1, path, null, null); 
fsm.resolveFile(uri2.toString(), opts); 

請讓我知道哪條路徑的語法著作。