1

異なるサーバー間のファイル転送に Commons VFS API を使用しています。コードは、Linux サーバーで完全に機能します。

しかし、Windows サーバーの URL 構文の問題が発生しています。以下の URL タイプのリストを試しましたが、いずれもInvalid Absolute URI Errorという結果になりました。

sftp://ユーザー@IP:C:\temp

sftp://ユーザー@IP/C:\temp

sftp://ユーザー@IP\C:\temp

stfp://user@IP/temp -- ファイルの種類を特定できませんでした

これらのエラーはすべて、VFS が SFTP を介した Windows ファイル システムへの接続をサポートしているかどうかについて、私たちの心に新たな疑問を抱かせました。

この点で何か助けていただければ幸いです。

4

1 に答える 1

1

ホストとパスおよびさまざまなパス要素を区切るには、スラッシュを使用する必要があります。

DOS ドライブを指定する方法は、使用する SFTP サーバーによって少し異なります。/cygdrive/c/temp のような cygwin パスを使用するものもあれば、/C/Temp を使用するものもあれば、ベース パスの下のどこかにあるベース ディレクトリを使用するものもあります。

実際にコロン付きのドライブ文字を許可するものがあるかどうかはわかりませんが、気になる場合は、:(コロン) を%3a(16 進コード)でエスケープする必要があります。

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);

どのパス構文が機能するか教えてください。

于 2015-01-05T17:08:58.803 に答える