1

我们使用 Commons VFS API 在不同服务器之间传输文件。该代码非常适用于 Linux 服务器。

但是我们遇到了 Windows 服务器的 URL 语法问题。我们尝试了下面的 URL 类型列表,但所有这些都导致Invalid Absolute URI Error

sftp://user@IP:C:\temp

sftp://user@IP/C:\temp

sftp://user@IP\C:\temp

stfp://user@IP/temp -- 导致无法确定文件类型

所有这些错误引发了我们心中的另一个疑问,即VFS是否支持通过SFTP连接到Windows文件系统。

感谢您在这方面的任何帮助。

4

1 回答 1

1

您需要使用正斜杠将主机与路径和不同的路径元素分开。

指定 dos 驱动器的方式取决于您使用的 SFTP 服务器。其中一些使用 cygwin 路径,例如 /cygdrive/c/temp,另一些使用 /C/Temp,还有一些使用基本路径下方的某个基本目录。

我不确定是否有一个实际上允许带冒号的驱动器号,但无论如何,如果您关心,您需要使用(十六进制代码)转义:(冒号):%3a

sftp://user@ip/C%3a/temp

如果您不想自己在 URL 中引用所有可能的字符,则可以使用此答案中建议的 URI 类:(但您需要确保以(斜杠)开始path字符串/以使其绝对。)

URI uri1 = new URI("sftp", "user:p@ssword", "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:p@ssword", "127.0.0.1", -1, path, null, null);
fsm.resolveFile(uri2.toString(), opts);

请让我知道哪种路径语法有效。

于 2015-01-05T17:08:58.803 回答