2014-11-23 88 views
1

我想将一个简单的FTPServer嵌入到我的单元测试中,以测试文件上传的FTP客户端功能。我尝试了Apache FTPServer(ftpserver-core-1.0.6.jar)。适用于Windows的UnitTest的嵌入式FTPServer:FileUpload 551错误

文件上传失败,

551 /C:/<correctDestinationPath>/myFile.txt: Error on output file.

这里我设置了服务器代码:

FtpServerFactory serverFactory = new FtpServerFactory(); 

    BaseUser user = new BaseUser(); 
    user.setName("anonymous"); 
    user.setPassword(System.getProperty("user.name") + "@" + InetAddress.getLocalHost().getHostName()); 
    user.setHomeDirectory(TEST_TARGET_DIR_LOCAL); 
    List<Authority> authorities = new ArrayList<Authority>(); 
    authorities.add(new WritePermission()); 
    user.setAuthorities(authorities); 
    UserManager userManager = serverFactory.getUserManager(); 
    userManager.save(user); 

    myServer = serverFactory.createServer(); 
    myServer.start(); 

这完全适用于连接和记录:

220 Service ready for new user. 
USER ******* 
331 Guest login okay, send your complete e-mail address as password. 
PASS ******* 
230 User logged in, proceed. 
SYST 
215 UNIX Type: Apache FtpServer 
TYPE I 
200 Command TYPE okay. 

生产性代码如下所示调用FTPClient:

myFtpClient.storeFile("C:\<correctDestinationPath>\myFile.txt", anInputStream); 

请注意,这是我的Windows机器上的正确路径。但FTPServer将其加扰为一个类似unix的路径“/C:/correctDestinationPath/myFile.txt”。

我怎样才能配置FTPServer,它也适用于Windows?单元测试本身当然应该是OS中立的。

回答

1

我自己找到了解决方案。两种可能性:

  1. 设置用户的主目录的绝对路径(例如,“” C:\“),并上传文件,而不路径(仅适用于” myFtpClient.storeFile(‘myfile.txt的’,anInputStream );” - >文件存储在的user.home

  2. 不设置主目录在所有和上传文件与全限定路径