Symfoware

Symfowareについての考察blog

Java + MockFtpServerでFTPサーバー側のプログラムを作成する その3

Java + MockFtpServerでカスタムFTPサーバーを作成中です。
ディレクトリの表示まで試してみました。

Java + MockFtpServerでFTPサーバー側のプログラムを作成する その2

今回はファイルの取得を試してみます。




FileRetrCommandHandler



http://mockftpserver.sourceforge.net/stubftpserver-commandhandlers.html
こちらを見てみると、GETコマンドの処理はFileRetrCommandHandlerを
実装すれば良さそうです。

とりあえずのお試しなので、固定ファイルをダウンロードさせる処理を書いてみます。

ずいぶん不格好ですが、こんなプログラムになりました。


  1. import java.io.FileInputStream;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import org.mockftpserver.core.MockFtpServerException;
  5. import org.mockftpserver.core.command.Command;
  6. import org.mockftpserver.core.command.InvocationRecord;
  7. import org.mockftpserver.core.session.Session;
  8. import org.mockftpserver.core.util.Assert;
  9. import org.mockftpserver.stub.command.FileRetrCommandHandler;
  10. public class MyFileRetrCommandHandler extends FileRetrCommandHandler {
  11.     protected void beforeProcessData(Command command, Session session, InvocationRecord invocationRecord) throws Exception {
  12.         setFile("dummy");
  13.         super.beforeProcessData(command, session, invocationRecord);
  14.     }
  15.     
  16.     protected void processData(Command command, Session session, InvocationRecord invocationRecord) {
  17.         InputStream inputStream = null;
  18.         try {
  19.             inputStream = new FileInputStream("/home/baranche/blog/image.jpg");
  20.         } catch(Exception e) {
  21.             e.printStackTrace();
  22.         }
  23.         Assert.notNull(inputStream, "InputStream for []");
  24.         byte[] buffer = new byte[512];
  25.         try {
  26.             int numBytes;
  27.             while ((numBytes = inputStream.read(buffer)) != -1) {
  28.                 LOG.trace("Sending " + numBytes + " bytes...");
  29.                 session.sendData(buffer, numBytes);
  30.             }
  31.         }
  32.         catch (IOException e) {
  33.             throw new MockFtpServerException(e);
  34.         }
  35.     }
  36. }





メインのプログラムも修正します。


  1. import org.mockftpserver.core.command.CommandNames;
  2. import org.mockftpserver.stub.StubFtpServer;
  3. public class MainProccess {
  4.     
  5.     public static void main(String... args) {
  6.         
  7.         StubFtpServer stubFtpServer = new StubFtpServer();
  8.         stubFtpServer.setServerControlPort(10021);
  9.         
  10.         stubFtpServer.setCommandHandler(CommandNames.USER, new MyUserCommandHandler());
  11.         stubFtpServer.setCommandHandler(CommandNames.PASS, new MyPassCommandHandler());
  12.         stubFtpServer.setCommandHandler(CommandNames.PWD, new MyPwdCommandHandler());
  13.         stubFtpServer.setCommandHandler(CommandNames.LIST, new MyListCommandHandler());
  14.         stubFtpServer.setCommandHandler(CommandNames.RETR, new MyFileRetrCommandHandler());
  15.         
  16.         stubFtpServer.start();
  17.         
  18.     }
  19. }






テスト



FileZillaで接続。
ファイルのダウンロードを実行します。

525_01.png

ちゃんとファイルのダウンロードが行えました。

525_02.png

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/01/12(月) 11:47:48|
  2. Java
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Python + pyftpdlibでカスタムFTPサーバーを作成1 起動とユーザー認証 | ホーム | Java + MockFtpServerでFTPサーバー側のプログラムを作成する その2>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1582-8c9c75f5
この記事にトラックバックする(FC2ブログユーザー)