【发布时间】:2011-05-01 15:13:28
【问题描述】:
我想我了解常规 FTP 传输中 ASCII 模式和二进制模式之间的区别——在二进制模式下,文件被精确复制,而在 ASCII 模式下,客户端可以修改行尾(从 Windows -> UNIX 中删除回车或将其添加到另一个方向)。但是,我认为 SFTP 协议只支持 Binary 模式风格的传输;源文件不会被修改。
但是,当使用 JSch 库将文件从 Windows 复制到 UNIX 时,Windows 样式的行尾会被去除。这是有问题的,因为这些文件是由其他人使用各种方法在 Windows 机器上检索到的,我不能保证他们的客户会在每次换行之前重新添加回车。
Properties properties = new Properties();
properties.setProperty("StrictHostKeyChecking", "no");
Session session = jsch.getSession(UserName, Address, Port);
session.setPassword(Password);
session.setConfig(properties);
session.connect();
ChannelSftp channel = (ChannelSftp)session.openChannel("sftp");
channel.connect();
channel.
channel.cd(SCPDir);
channel.put(new ByteArrayInputStream(WindowsStyleString.getBytes()), FileName);
channel.disconnect();
session.disconnect();
我能做些什么来确保 JSch 准确地传输文件吗?令人沮丧的是缺乏文档,所以我不确定它是否有一些参数,或者我可以指定一些额外的 SSH 属性来确保逐字传输。当 ASCII 模式样式修改不是 SFTP 标准的一部分时,为什么会发生这种情况?
【问题讨论】:
-
我觉得这个问题可能与我在这里问的问题有关:superuser.com/questions/234527/…。除了在我的情况下 CR 被添加而不是被剥离! :(
标签: java sftp line-endings jsch