2

Apache commons net FTPClientを使用して、バッチジョブの一部としてファイルを配布しています。クライアントはカプセル化されていますが、大まかに次のメソッド呼び出しを発行します(簡潔にするために、エラー処理、ストリーム処理などを省略しています)。

FTPClient client = new FTPClient();
client.connect("127.0.0.1", 22);
client.login("user", "password");
client.setFileType(FTP.BINARY_FILE_TYPE);
client.changeWorkingDirectory("path/");
client.storeFile("file1.txt", new ByteArrayInputStream("hello world".getBytes()));
client.disconnect();

上記のコマンドを発行すると、次のコマンドがFTPサーバーに送信されます。

USER zoor
PASS ********
TYPE I
CWD path/
PORT 127,0,0,1,229,72
STOR file1.txt

そして、これはうまくいきます。ただし、現在、ファイルをサポートしていない、CWDまたはSTOR代わりにとに依存しCDているレガシーシステムにファイルを送信する必要がある状況にありPUTます。

今私の質問は、FTPClientにこれらのコマンドを使用させるにはどうすればよいですか?

sendCommandこのメソッドを使用してCDコマンドを送信することはできますが、PUTコマンドを使用してこれを適切に(そして正しく)行う方法がわかりません(ファイルデータも送信する必要がある場合)。

注:このようなファイルを配布するには、FTPよりも優れた方法があることを認識していますが、残念ながら、私の手は縛られています。受信者はFTPを使用しており、変更する意思はありません。

更新:レガシーシステムはAS/400マシンです。

4

3 に答える 3

1

CDとPUTは実際にはFTPコマンドではないので、質問はほとんど意味がありません。解決策(できるだけ早く動作する必要があるため)は、ファイルを独自のFTPサーバーに転送し、スクリプトを呼び出すことです。 AS/400マシンにファイルを転送するサーバー上のSSH経由。

于 2012-05-15T11:22:56.443 に答える
1

これは機能するはずです。問題を回避したことは理解していますが、完全を期すために、AS/400がファイルを保存するためにサイトコマンドを必要とするかどうかを知っていますか。

あなたが取り戻すエラーは何ですか?

私は定期的にファイルをMVS/Z / OSに送信しますが、ストレージとセットアップのために最初に送信する必要のあるサイトコマンドがいくつかあります。

サイトコマンドは次のようになります。

  • トレイル
  • CYLINDERS PRIMARY = 350 SECONDARY = 300
  • RECFM = FB LRECL = 1516 BLKSIZE = 31836
  • CONDDISP=削除

これが私が使用する小さなコードです。ftpは基本的にあなたの例で使用するFTPClientです。

    public boolean sendSiteCommand(String siteCmd){
    if (null == siteCmd){
        System.err.println("Warning, Null Parameter sent to sendSiteCommand, aborting...");
        return false;
    }

    try{

        return ftp.sendSiteCommand(siteCmd);

    }catch (Exception e){
        System.out.println("Error Occurred Sending Site Command to Remote System, aborting...");
        e.printStackTrace(System.err);
        return false;
    }
}
于 2012-05-15T13:49:40.817 に答える
0

本当に別のコマンドとしてファイルをアップロードする必要がある場合は、いつでも別のコマンドでFTPClient内部メソッドを拡張して呼び出すことができます。これらは、既存のストアにコマンドとして任意の文字列を指定できるように構築されています。

例:

    public static class OldFtpClient extends FTPClient {
        public OutputStream putFileStream(String remote) throws IOException {
            return _storeFileStream("PUT", remote);
        }
    }

クラスのソースはhttps://github.com/apache/commons-net/blob/master/src/main/java/org/apache/commons/net/ftp/FTPClient.javaにあります。

于 2019-02-25T17:33:31.280 に答える