我正在使用SFTP API
(jsacpe
)进行文件传输。
这些文件基本上是一个文字内容,其扩展名为.log, .dat
,.txt
或.jrn
。在传输文件之前,我正在执行AES encryption
。
文件传输模式为“自动”。
示例代码:
SshParameters sshParameters = new SshParameters("127.0.0.1",22,"User Name","Password");
SshHostKeys sshHostKeys = new SshHostKeys();
InetAddress address = InetAddress.getByName("127.0.0.1);
sshHostKeys.addKey(address, "finger print");
HostKeyVerifier keyVerifier = new HostKeyFingerprintVerifier(sshHostKeys);
sshParameters.setHostKeyVerifier(keyVerifier);
sftp = new Sftp(sshParameters);
sftp.setTimeout(30 * 1000);
sftp.setDownloadBlockSize(300);
sftp.setUploadBlockSize(300);
sftp.setSendBufferSize(300);
sftp.setReceiveBufferSize(300);
sftp.addSftpListener(this);
sftp.connect();
**sftp.setAuto(true);**
我想知道sftp将以哪种模式(ASCII或二进制)传输文件。
如果我们将其设置为“自动”,sftp api将如何决定ftp模式,因为扩展类型对于每组文件都不同。
May be this is an basic question but i want to understand.
提前感谢!
答案 0 :(得分:0)
SFTP协议默认使用二进制模式,直到SFTP版本4,它甚至没有ASCII模式。某些软件(包括我们的SecureBlackbox库)可以模拟ASCII模式,但是这种模拟不是很可靠,因为它不知道目标系统使用什么EOL约定。
现在正如评论中所说,你最好坚持使用二进制模式,不要依赖任何自动化的东西。我可以想象,在某些小文件上,自动检测可能会失败,从而破坏您的数据。