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);
Пожалуйста, дайте мне знать, какой синтаксис пути работает.