Java SFTP (apache vfs2) - пароль с @
Я пытаюсь использовать org.apache.commons.vfs2 для загрузки файла через SFTP. Проблема в том, что пароль содержит символ '@', поэтому это вызывает неправильный анализ URI:
org.apache.commons.vfs2.FileSystemException: Expecting / to follow the hostname in URI
У кого-нибудь есть идеи, как обойти эту проблему? (Я не могу изменить пароль, очевидно). Это код, который я использую:
String sftpUri = "sftp://" + userName + ":" + password + "@"
+ remoteServerAddress + "/" + remoteDirectory + fileName;
String filepath = localDirectory + fileName;
File file = new File(filepath);
FileObject localFile = manager.resolveFile(file.getAbsolutePath());
FileObject remoteFile = manager.resolveFile(sftpUri, opts);
localFile.copyFrom(remoteFile, Selectors.SELECT_SELF);
2 ответа
Решение
Используйте фактический URI-конструктор вместо собственного
String userInfo = userName + ":" + password;
String path = remoteDirectory + filename; // Need a '/' between them?
URI sftpUri = new URI("sftp", userInfo, remoteServerAddress, -1, path, null, null);
...
FileObject remoteFile = manager.resolveFile(sftpUri.toString(), opts);
Вам нужно закодировать свой пароль с помощьюUriParser.encode()
, вы можете изменить свой код, как показано ниже:
вы код:
String sftpUri = "sftp://" + userName + ":" + password + "@"
+ remoteServerAddress + "/" + remoteDirectory + fileName;
изменить на:
String sftpUri = "sftp://" + userName + ":" + **UriParser.encode(password, "@".toCharArray())**+ "@"
+ remoteServerAddress + "/" + remoteDirectory + fileName;
Надеюсь, это поможет, спасибо.