2016-07-13 5 views
1

Ich versuche, eine Datei auf einem Remote-FTP-Host zu setzen. Dies ist, wie ich in der Regel tun:Konnte nicht in Arbeitsverzeichnis "/" beim Aufrufen von FileSystemManager.resolveFile mit FTP wechseln URL

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 

Mein ftUri ist:

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

Aber ich erhalte die folgende Ausnahme:

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 

Ist es möglich, ein Arbeitsverzeichnis Pfad zu setzen ?

Meine Vermutung ist, dass die FTP-Bibliothek versucht, auf dem Verzeichnis root arbeiten, die ich keine Erlaubnis habe; Allerdings informiere ich über den URI einen anderen Pfad, aber irgendwie besteht die Bibliothek darauf, im Verzeichnis root zu arbeiten.

Antwort

0

Verwenden Sie die .resolveFile overload that takes the baseFile parameter:

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

Diese Überlastung ist nicht in der FileSystemManager Schnittstelle. Aber es ist in der Standardimplementierung, DefaultFileSystemManager. Also musst du die fsManager auf die DefaultFileSystemManager werfen.

+0

Ich konnte diese Methode, die Sie beziehen, nicht finden. https://commons.apache.org/proper/commons-vfs/apidocs/org/apache/commons/vfs2/FileSystemManager.html –

+1

Siehe meine aktualisierte Antwort. –

Verwandte Themen