Commons VFS: синтаксис SFTP URL при подключении к Windows Server, работающему с Open SSH

Мы используем Commons VFS API для передачи файлов между различными серверами. Код отлично работает для серверов Linux.

Но у нас есть проблемы с синтаксисом URL для серверов Windows. Мы попробовали приведенный ниже список типов URL, но все они привели к неверной абсолютной ошибке URI,

SFTP: // пользователь @ IP: C: \ Temp

SFTP: // пользователь @ IP / C: \ Temp

SFTP: // пользователь @ IP \ C: \ Temp

stfp: // user @ IP / temp - не удалось определить тип файла

Все эти ошибки вызвали у нас еще одно сомнение: поддерживает ли VFS подключение к файловой системе Windows через SFTP.

Любая помощь в этом отношении приветствуется.

1 ответ

Вы должны использовать прямые косые черты, чтобы отделить хост от пути и различных элементов пути.

Способ указать диск с драйверами зависит от используемого 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);

Пожалуйста, дайте мне знать, какой синтаксис пути работает.

Другие вопросы по тегам