Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JSch中设置文件类型和文件传输模式?_Java_Ftp_Sftp_Jsch_Apache Commons Net - Fatal编程技术网

Java 如何在JSch中设置文件类型和文件传输模式?

Java 如何在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各自使用

我使用了Apache Common Net
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“数据类型”之间切换。

非常感谢您,兄弟,你完全回答了我的问题。