2013-10-22 39 views
0

我正在使用SFTP APIjsacpe)进行文件传输。需要了解文件传输模式

这些文件基本上是扩展名为.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);** 

我想知道在哪个模式(ASCII或二进制)的SFTP将传输的文件。

如果我们将sftp api设置为“自动”,sftp api将决定ftp模式,因为每种文件的扩展类型都不相同。

May be this is an basic question but i want to understand. 

在此先感谢!

+0

作为数据将始终被加密为二进制.... –

+0

如果您正在加密文件,请使用BINARY。事实上,除非您使用FTP为您处理的奇怪字符编码,否则实际上不需要使用其他任何东西。但是,由于您使用SFTP,为什么要对文件进行加密? – 2013-10-22 02:38:19

回答

0

SFTP协议默认使用二进制模式,直到SFTP版本4甚至没有ASCII模式。一些软件(包括我们的SecureBlackbox库)可以模拟ASCII模式,但这种模拟不是很可靠,因为它不知道目标系统使用什么EOL约定。

现在正如评论中所说,您最好坚持使用二进制模式,并且不要自动依赖任何东西。我可以想象,在某些小文件中,自动检测可能会失败,从而损坏您的数据。

+0

Eugene Mayevski'EldoS感谢您的回复,我会尝试使用默认的二进制设置 – User1234

+0

@ User1234正确的方式来感谢StackOverflow网络,以满足您的答案。如果您的问题在整体上回答了某个特定答案,您需要将该答案标记为已接受,以让其他人知道问题已得到解答。复选标记位于投票按钮下方。 –