我想我理解在常規FTP傳輸的ASCII模式和二進制模式之間的區別 - 在二進制模式下,文件被完全複製,並且在ASCII模式下,客戶端可以修改行結束符(剝離從Windows返回 - > UNIX或將其添加到其他方向)。不過,我認爲SFTP協議只支持二進制模式風格的傳輸;源文件不會被修改。JSch sftp傳輸剝離Windows行結束
但是,當使用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標準的一部分時?
我感覺這個問題可能與我在這裏問的問題有關:http://superuser.com/questions/234527/how-to-fix-windows-new-line-character-on-sftp-synchronization -in-蝕-PDT。除了在我的情況下增加CR而不是剝離! :( – denormalizer 2011-06-17 00:31:19