我想在我的单元测试中嵌入一个简单的FTPServer,以测试用于文件上传的FTP客户端功能。我尝试了Apache FTPServer(ftpserver-core-1.0.6.jar)。

文件上传失败,并显示

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”。

如何配置同样适用于Windows的FTPServer?单元测试本身当然应该与操作系统无关。

最佳答案

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


将用户的主目录设置为绝对路径(例如“” C:\“),然后上传不带路径的文件(仅” myFtpClient.storeFile(“ myFile.txt”,anInputStream);“->文件存储在用户中。家
完全不设置主目录,并使用完整的限定路径上传文件。

07-24 09:19