我有一个简单的文本文件,我使用SFTP(客户端:FireFTP)从Windows平台上传到Unix服务器。我注意到当使用SFTP而不是普通FTP上传时,文件被强制上传到" Binary"模式而不是" ASCII"。
是否有人知道执行转让方法背后的原因?通常情况下这没关系,但是我在服务器上解析这个文件(char by char),并在上传到" Binary"导致我的解析器出现问题。
是的,我正在更改解析器来处理这个问题但是,我主要感兴趣的是为什么SFTP强制上传发生在" binary"而不是" ASCII?
如果" ASCII"不再是现代SFTP的选择,只是简单地接受"从Windows传输文件时 - >你将在Unix服务器上的整个文件中剩余额外的CR(^ M)剩余的Unix,以前包含标准Windows(CRLF)吗?
感谢您的指导
答案 0 :(得分:1)
Firezilla wiki有一个page on technical specifications。最广泛实施的SFTP规范版本是version 3 draft 2。值得注意的是,规范的Openssh SFTP客户端和服务器implement that version。
SFTP协议的第3版没有与FTP的ASCII传输模式等效的功能。它总是逐字传输文件。
更高版本的SFTP协议支持转换行终止符字符的传输模式。假设您可以找到支持该功能的客户端和服务器。
这是客户端使用的SFTP协议版本的问题吗?
我不知道FireFTP的功能。但OpenSSH SFTP服务器不支持类似ASCII的传输模式。
从Windows传输文件时简单地“接受” - > Unix你将有额外的CR(^ M)剩余......
有多种方法可以解决这个问题。有程序可以从一种格式转换为另一种格式。一些读取文本文件的程序将容忍任何格式的行终止符。
答案 1 :(得分:1)
SFTP协议有几个版本(1-6),版本3最受欢迎。协议版本4中添加了ASCII模式。
在我们的SecureBlackbox产品中,如果已经与协议的版本3或更低版本协商了连接,我们将模拟ASCII模式,但此类仿真要求您知道远程服务器的操作系统(或行结束)。此外,ASCII模式使得实现SFTP请求的所谓流水线操作变得更加困难,这一特性使SFTP传输速度更快。
答案 2 :(得分:0)
FTP!= SFTP。这是你应该注意的最重要的事情。
而ASCII模式只是一个古老的废话。在相当现代的SFTP中没有这样的东西,它只是按原样传输字节(没有理由以其他方式进行)。