当前位置: 首页 > 知识库问答 >
问题:

尝试用JSch通道复制IBM大型机SFTP上载

商天逸
2023-03-14

我正在尝试使用Jsch Sftp通道将一个文件上传到一个IBM大型机,目录必须是“//”,在那里大型机会自动将文件路由到它需要去的地方。

在IBM大型机上的sftp命令会话中,我可以执行以下操作:

sftp myuser@1.2.3.4
connecting to 1.2.3.4...
myuser@1.2.3.4's password:
sftp> pwd
Remote working directory: /users/home/myuser
sftp> cd //
sftp> pwd
Remote working directory: //
sftp> put "#12345.abcdef.xxx.xxx"
uploading #12345.abcdef.xxx.xxx to //#12345.abcdef.xxx.xxx
#12345.abcdef.xxx.xxx               100%  403   0.4KB/s 00:00
JSch jsch = new JSch();
Session session = jsch.getSession("myuser", "1.2.3.4");
session.setPassword("mypass");
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();

ChannelSftp sftp = (ChannelSftp)channel;
log.info(" user home pwd " + sftp.pwd());  //prints /users/home/myuser
sftp.cd("//")
log.info(" pwd after cd " + sftp.pwd()); //only prints /
sftp.put(filename);   //get sftp error, no such file

我对我的/users/home/myusers目录执行JSch sftp会话完全没有问题,只是无法将其转到//

共有1个答案

蒲魁
2023-03-14

伪文件夹“//”也有类似的问题。避免使用sftp.cd(“//”),最好尝试使用sftp.put(“/-/”+文件名);,它解决了我的问题。希望对你也有帮助。

 类似资料:
  • 我有一个文件要上传(比如)。我第一次想将这个文件作为临时文件上传(比如)。然后,如果文件成功传输(完全传输),那么我需要将其重命名为其原始名称()。但是如果文件没有完全传输,那么我需要删除我最初上传的临时文件,因为我不想在服务器中保留损坏的文件。使用这个JSch库可以做到这一点吗?下面是示例代码。这段代码对实现这一点有意义吗? 示例代码:

  • 在apache commons net ftpclient中,有ftpclient.printWorkingDirectory()来获取当前目录的字符串。 如何使用jsch sftp客户机实现同样的功能?有一个名为realpath(String)的方法,但它似乎不对,我无法使其工作。

  • 有没有可能,或者有没有人创建了一个过程,通过这个过程,他们使用DB2的LUW实例来进行测试数据、本机和cobol过程,同时实际使用DB2的大型机版本来运行他们的生产软件?也许另一个很好的问题是,这样做会不会是一件聪明的事情? 现在,我们的测试系统问题的一些显而易见的解决方案将是花费资源使大型机更快,或者甚至有一个专用的测试大型机(显然不必那么强大)。但是,正如所有与IBM共事的人都知道的那样,那些

  • 源和目标都是远程的。 是否可以使用JSCH?

  • 我正在尝试使用JSch从SFTP服务器下载文件到我的本地机器。无论文件大小如何,它只下载16371字节的数据并结束传输。它不会引发任何异常。如果文件小于16371字节,它将成功传输,但对于任何较大的文件,传输都会导致文件损坏。

  • 为SFTP连接运行具有以下设置的SSHD: 现在,使用JSch连接到sshd并连接一个“sftp”通道,我将得到以下异常: com.jcraft.jsch.jschException:无法发送通道请求 这里是我的Java代码(非常类似于表单JSch网站) 如果我在sshd配置中禁用-line,那么一切工作都很好。但是我不能在以后的生产中更改这条线(它已经存在了)。 但使用WinSCP,即使在以下位