2014-11-23 87 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. 不設置主目錄在所有和上傳文件與全限定路徑