我想在我的单元测试中嵌入一个简单的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的路径&#34; / C:/correctDestinationPath/myFile.txt"。
如何为Windows配置FTPServer?单元测试本身当然应该是操作系统中立的。
答案 0 :(得分:1)
我自己找到了解决方案。两种可能性:
将用户的主目录设置为绝对路径(例如&#34;&#34; C:\&#34;)并上传没有路径的文件(仅限#34; myFtpClient.storeFile (&#34; myFile.txt&#34;,anInputStream);&#34; - &gt;文件存储在user.home中
根本不设置主目录,并使用完全限定路径上传文件。