【发布时间】:2015-05-24 08:30:40
【问题描述】:
我正在尝试使用 Jsch Sftp Channel 将文件上传到 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 sftp 会话(版本 0.1.5.1)来尝试相同的上传,但它不起作用:
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
所以我无法通过 JSch 库获得 // 结构。是否需要为 sftp 会话设置某种模式或标志才能知道它在大型机上?
我对我的 /users/home/myuser 目录进行 JSch sftp 会话完全没有问题,只是无法让它进入 //
【问题讨论】:
-
“没有这样的文件”不是意味着
filename有问题吗?无论如何,您没有可以请教的技术支持人员吗?你网站上做过同样事情的人?程序规范? -
不幸的是,我们的 z/OS 上没有运行 FTP 服务器,所以我玩不了。尝试一个疯狂的猜测:您是否尝试过在您的 z/OS 文件系统中使用像
//#12345.abcdef.xxx.xxx这样的“绝对”文件名而不是cd-ing? -
感谢您的建议,@piet.t 我已经尝试了尽可能多的变体,但 sftp 会话无法识别 // 目录
-
您能否复制/粘贴您的手动传输和您尝试的程序化传输的确切输出(除了敏感信息之外,准确无误)?你的技术人员怎么说?
-
我终于找到了 IBM 大型机系统的人,但仍然找不到使用 JSch SftpChannel 将文件放在我需要的位置的方法。我最终决定做的是将文件 sftp 到我的主目录,然后创建一个 exec 通道来移动文件。所以像
mv ./SMPL.DATA "//'SMPL.DATA'"这样的 mv 命令最终在 JSch 执行通道中起作用