Ошибка URI SSH с Apache VFS
Я получаю следующую ошибку в приложении Android с Apache VFS, и я не могу найти что-то в Google, чтобы помочь. Я пытаюсь загрузить файл через SSH, и я получаю эту довольно расплывчатую ошибку. URI, как сообщается в logcat, выглядит корректно для меня в соответствии с документами VFS. Единственное, что я могу понять, это то, что он ожидает увидеть хост локальной сети вместо TLD. Это правда, и если да, то как мне это исправить? Если нет, что вам не нравится в этом URI?
Caused by: org.apache.commons.vfs2.FileSystemException: Expecting / to follow the hostname in URI "sftp://username:***@mydomain.com/public_html/".
Ошибки одинаковы с определенным именем файла или без него.
Вот полный вывод logcat.
01-22 19:41:15.660: E/AndroidRuntime(1997): FATAL EXCEPTION: main
01-22 19:41:15.660: E/AndroidRuntime(1997): java.lang.RuntimeException: org.apache.commons.vfs2.FileSystemException: Invalid absolute URI "sftp://username:***@mysite.com/public_html/".
01-22 19:41:15.660: E/AndroidRuntime(1997): at app.specialsauce.myapp.SiteEditor.upload(SiteEditor.java:279)
01-22 19:41:15.660: E/AndroidRuntime(1997): at app.specialsauce.myapp.SiteEditor.testSFTPSite(SiteEditor.java:289)
01-22 19:41:15.660: E/AndroidRuntime(1997): at app.specialsauce.myapp.SiteEditor$10.onClick(SiteEditor.java:629)
01-22 19:41:15.660: E/AndroidRuntime(1997): at android.view.View.performClick(View.java:2532)
01-22 19:41:15.660: E/AndroidRuntime(1997): at android.view.View$PerformClick.run(View.java:9293)
01-22 19:41:15.660: E/AndroidRuntime(1997): at android.os.Handler.handleCallback(Handler.java:587)
01-22 19:41:15.660: E/AndroidRuntime(1997): at android.os.Handler.dispatchMessage(Handler.java:92)
01-22 19:41:15.660: E/AndroidRuntime(1997): at android.os.Looper.loop(Looper.java:150)
01-22 19:41:15.660: E/AndroidRuntime(1997): at android.app.ActivityThread.main(ActivityThread.java:4263)
01-22 19:41:15.660: E/AndroidRuntime(1997): at java.lang.reflect.Method.invokeNative(Native Method)
01-22 19:41:15.660: E/AndroidRuntime(1997): at java.lang.reflect.Method.invoke(Method.java:507)
01-22 19:41:15.660: E/AndroidRuntime(1997): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-22 19:41:15.660: E/AndroidRuntime(1997): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-22 19:41:15.660: E/AndroidRuntime(1997): at dalvik.system.NativeStart.main(Native Method)
01-22 19:41:15.660: E/AndroidRuntime(1997): Caused by: org.apache.commons.vfs2.FileSystemException: Invalid absolute URI "sftp://username:***@mysite.com/public_html/".
01-22 19:41:15.660: E/AndroidRuntime(1997): at org.apache.commons.vfs2.provider.AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:61)
01-22 19:41:15.660: E/AndroidRuntime(1997): at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:693)
01-22 19:41:15.660: E/AndroidRuntime(1997): at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:621)
01-22 19:41:15.660: E/AndroidRuntime(1997): at app.specialsauce.myapp.SiteEditor.upload(SiteEditor.java:265)
01-22 19:41:15.660: E/AndroidRuntime(1997): ... 13 more
01-22 19:41:15.660: E/AndroidRuntime(1997): Caused by: org.apache.commons.vfs2.FileSystemException: Expecting / to follow the hostname in URI "sftp://username:***@mysite.com/public_html/".
01-22 19:41:15.660: E/AndroidRuntime(1997): at org.apache.commons.vfs2.provider.HostFileNameParser.extractToPath(HostFileNameParser.java:155)
01-22 19:41:15.660: E/AndroidRuntime(1997): at org.apache.commons.vfs2.provider.URLFileNameParser.parseUri(URLFileNameParser.java:50)
01-22 19:41:15.660: E/AndroidRuntime(1997): at org.apache.commons.vfs2.provider.AbstractFileProvider.parseUri(AbstractFileProvider.java:188)
01-22 19:41:15.660: E/AndroidRuntime(1997): at org.apache.commons.vfs2.provider.AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:57)
01-22 19:41:15.660: E/AndroidRuntime(1997): ... 16 more
1 ответ
Я подозреваю, что у вас есть проблемный символ в пароле (так как это единственная информация, не показанная). Вам необходимо процентное кодирование имени пользователя и пароля перед добавлением его в URL.