Java 如何在JSch中设置文件类型和文件传输模式?
我使用了Apache Common NetJava 如何在JSch中设置文件类型和文件传输模式?,java,ftp,sftp,jsch,apache-commons-net,Java,Ftp,Sftp,Jsch,Apache Commons Net,我使用了Apache Common NetFTPClient,并在上传文件之前使用如下方法设置了我的FTPClient ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE); 现在我尝试使用JSch。上传文件之前是否需要相同的设置以及它们的外观?谢谢。首先,从您的问题中不清楚您是否知道JSch和Apache Commons NetFtpClient各自使用
FTPClient
,并在上传文件之前使用如下方法设置了我的FTPClient
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
现在我尝试使用JSch。上传文件之前是否需要相同的设置以及它们的外观?谢谢。首先,从您的问题中不清楚您是否知道JSch和Apache Commons Net
FtpClient
各自使用完全不同和不相关的协议。JSch是一个SSH/SFTP客户端,FtpClient
是一个FTP客户端
JSch使用SFTP协议版本3 在SFTP协议版本3中,没有传输模式。或者换句话说,只有二进制传输模式 即使JSch使用了支持ascii模式的较新版本的SFTP协议,二进制模式仍然是SFTP中的默认模式 所以你什么都不用做 这与FTP协议不同,后者默认为ascii模式。因此,您已经使用FTP显式地切换到二进制模式(在Apache Commons Net中使用)
至于–您的FTP代码是错误的。该方法接受一个
*\u TRANSFER\u MODE
常量。切勿使用*\u文件类型
。如果使用二进制文件类型
,将导致向服务器发送无效的模式I
命令。这肯定是失败的,因此毫无效果。检查方法结果代码,确保返回false
从FTP代码中删除呼叫。无需调用FTPClient.setFileTransferMode
。Apache Commons Net无论如何只支持默认的“流”模式(大多数FTP服务器也不支持任何其他模式)
注意名字中的混乱。而ascii/二进制通常被称为“传输模式”。在FTP协议规范(的第3.1.1节)中,它们实际上被称为“数据类型”,并使用
TYPE
命令进行管理
FTP规范称之为“传输模式”,由模式
命令(第3.4节)控制,是完全不同的模式:流/块/压缩。它们很少被设定,甚至很少被提及
由于Apache Commons Net
FtpClient
混淆了设置“传输模式”.setFileTransferMode
的方法,它经常会导致像您一样的错误–人们错误地使用FtpClient.setFileTransferMode
在二进制/ascii“数据类型”之间切换。非常感谢您,兄弟,你完全回答了我的问题。