2016-07-13 15 views
1

원격 FTP 호스트에 파일을 저장하려고합니다.FTP URL을 사용하여 FileSystemManager.resolveFile을 호출 할 때 "/"작업 디렉토리로 변경할 수 없습니다.

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

하지만 다음과 같은 예외가 받고 있어요 :

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은 다음과 같습니다

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 디렉토리에서 작업 할 것을 주장합니다.

답변

0

사용은 .resolveFile overload that takes the baseFile parameter :

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

이 오버로드는 FileSystemManager 인터페이스에 있지 않습니다. 그러나 기본 구현 인 DefaultFileSystemManager에 있습니다. 따라서 fsManagerDefaultFileSystemManager으로 전송해야합니다.

+0

참조하는이 방법을 찾을 수 없습니다. https://commons.apache.org/proper/commons-vfs/apidocs/org/apache/commons/vfs2/FileSystemManager.html –

+1

업데이트 된 답변보기 –