1

ファイルアップロード用の FTP クライアント機能をテストするために、単純な FTPServer を単体テストに組み込みたいと考えています。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 を構成するにはどうすればよいですか? もちろん、単体テスト自体は OS に依存しないものにする必要があります。

4

1 に答える 1

1

私は自分で解決策を見つけました。2 つの可能性:

  1. ユーザーのホーム ディレクトリを絶対パス (例: "C:\") に設定し、パスなしでファイルをアップロードします ("myFtpClient.storeFile( "myFile.txt", anInputStream );" のみ) -> ファイルはユーザーに保存されます。 。家

  2. ホームディレクトリをまったく設定せず、完全修飾パスでファイルをアップロードします。

于 2014-11-23T13:54:56.377 に答える