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;

Надеюсь, это поможет, спасибо.

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