我想我理解常规 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 标准的一部分时,为什么会发生这种情况?