1

リモート FTP ホストにファイルを配置しようとしています。これは私が通常行う方法です:

String ftpUri =
        "ftp://" + target.get(server).get("Username") + ":{" + target.get(server).get("Psswd") + "}@";
if (StringUtils.isBlank(target.get(server).get("Port"))) {
    ftpUri += target.get(server).get("Hostname") + target.get(server).get("RemotePath");
} else {
    ftpUri += target.get(server).get("Hostname") + ":" + target.get(server).get("Port") + target.get(server)
                                                                                                .get("RemotePath");
}

System.out.println("ftpUri = " + ftpUri);
FileSystemManager fsManager;
try {
    fsManager = VFS.getManager();
} catch (FileSystemException e) {
    throw new RuntimeException("Failed to get fsManager from VFS", e);
}

FileSystemOptions opts = new FileSystemOptions();

FtpFileSystemConfigBuilder.getInstance().setPassiveMode(opts, true);

FileObject remoteFile = fsManager.resolveFile(ftpUri, opts); // <- it breaks

ftUriは:

ftp://[username]:{[hash_password]}@[hostname]:21/users/afolder/anotherfolder/afile.pdf

しかし、次の例外が発生します。

Caused by: org.apache.commons.vfs2.FileSystemException: Could not change to work directory "/".
    at org.apache.commons.vfs2.provider.ftp.FtpClientFactory.createConnection(FtpClientFactory.java:130)
    ... 19 more

作業ディレクトリのパスを設定することはできますか?

私の推測では、FTP ライブラリがrootディレクトリで作業しようとしているのですが、私には許可がありません。ただし、URIを介して別のパスを通知していますが、どういうわけかライブラリはrootディレクトリで動作することを主張しています。

4

1 に答える 1

0

パラメータ.resolveFileを取るオーバーロードをbaseFile使用します。

public FileObject resolveFile(FileObject baseFile, String uri,
                              FileSystemOptions fileSystemOptions)

このオーバーロードはFileSystemManagerインターフェイスにはありません。しかし、それはデフォルトの実装であるDefaultFileSystemManager. したがって、 を にキャストする必要がfsManagerありDefaultFileSystemManagerます。

于 2016-07-13T10:58:43.763 に答える