使用FTP URL调用FileSystemManager.resolveFile时无法更改为工作目录“/”

问题描述 投票:1回答: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目录中工作。

java ftp ftp-client apache-commons-vfs
1个回答
0
投票

使用.resolveFile overload that takes the baseFile parameter

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

这种重载不在FileSystemManager界面中。但它在默认实现中,DefaultFileSystemManager。所以你必须把fsManager施放到DefaultFileSystemManager

© www.soinside.com 2019 - 2024. All rights reserved.