Apache Commons Net FTPClient - PUT而不是STOR?

时间:2012-05-15 08:35:08

标签: java ftp apache-commons-net

我使用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

这很好用。但是,现在我需要将文件发送到不支持CWDSTOR的遗留系统,而是依赖CDPUT,分别..

现在我的问题是,如何让FTPClient使用这些命令?

我可以使用sendCommand方法发送CD命令,但我不确定如何使用PUT命令正确(并且正确)执行此操作(假设我必须发送文件数据)也)。

注意:我意识到有比FTP更好的方式来分发这样的文件,但不幸的是,我的双手受到约束。收件人正在使用FTP并且不愿意更改。

更新:旧系统是AS / 400计算机。

3 个答案:

答案 0 :(得分:1)

我发现CD和PUT实际上并不是FTP命令,因此问题没有多大意义。解决方案(因为我们需要它尽快工作)是我们将文件传输到我们自己的FTP服务器,在该服务器上通过SSH调用脚本,将文件传输到AS / 400计算机。

答案 1 :(得分:1)

这应该有效,我知道你解决了这个问题,但为了完整起见,你知道AS / 400是否需要任何站点命令来存储文件。

你回来的错误是什么?

我经常将文件发送到MVS / Z / OS,并且有一些站点命令需要先发送以进行存储和设置。

网站命令看起来像:

  • TRAIL
  • 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;
    }
}

答案 2 :(得分: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中找到。